admin管理员组文章数量:1565365
代码环境, java + springboot + undertow + websocket
2.2.5.RELEASE/** * @description: websocket服务 * @author: lwb * @create: 2024-04-25 13:11 */ @Component @Slf4j @ServerEndpoint("/webSocket/{userId}") public class WebSocketServer { private Session session; @Autowired private MqttSubscriberOnly mqttSubscriber; // 创建线程池 public static final ExecutorService WEBSOCKET_POOL_EXECUTOR = new ThreadPoolExecutor( 20, 20, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy()); private static CopyOnWriteArraySet<WebSocketServer> webSockets = new CopyOnWriteArraySet<>(); private static Map<String, Session> sessionPool = new HashMap<>(); private static Map<String, List<String>> userSession = new HashMap<>(); /** * @param session session * @param userId 用户id * @description 建立连接时监听方法 */ @OnOpen public void onOpen(Session session, @PathParam(value = "userId") String userId) { try { this.session = session; webSockets.add(this); if (!userSession.containsKey(userId)) { List<String> sessionIds = new ArrayList<>(); userSession.put(userId, sessionIds); } userSession.get(userId).add(session.getId()); sessionPool.put(session.getId(), session); log.info("【websocket消息】有新的连接,总数为:" + webSockets.size()); } catch (Exception e) { log.error(e.getMessage()); e.printStackTrace(); throw e; }@OnClose public void onClose() {}@OnMessage public void onMessage(String message) {}}
启动报错:
rg.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'defaultSockJsTaskScheduler' is expected to be of type 'org.springframework.scheduling.TaskScheduler' but was actually of type 'org.springframework.beans.factory.support.NullBean'
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:395)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:227)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1155)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1122)
at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.resolveSchedulerBean(ScheduledAnnotationBeanPostProcessor.java:315)
at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.finishRegistration(ScheduledAnnotationBeanPostProcessor.java:256)
at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.onApplicationEvent(ScheduledAnnotationBeanPostProcessor.java:233)
at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.onApplicationEvent(ScheduledAnnotationBeanPostProcessor.java:105)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:403)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:360)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:897)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:162)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:553)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
at com.hxsoft.ApplicationLauncher.main(ApplicationLauncher.java:27)Disconnected from the target VM, address: '127.0.0.1:62864', transport: 'socket'
原因 错误上提示清晰:
'org.springframework.scheduling.TaskScheduler' but was actually of type'org.springframework.beans.factory.support.NullBean'
解决方案:加上配置类即可解决
@Configuration public class WebSocketConfig { /** * ServerEndpointExporter 作用 * * 这个Bean会自动注册使用@ServerEndpoint注解声明的websocket endpoint * * @return */ @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } /** * 解决spring中socketBean冲突,如果有冲突就加没有就不管 * @return */ @Bean @Nullable public TaskScheduler taskScheduler() { ThreadPoolTaskScheduler threadPoolScheduler = new ThreadPoolTaskScheduler(); // threadPoolScheduler.setThreadNamePrefix("SockJS-"); // threadPoolScheduler.setPoolSize(Runtime.getRuntime().availableProcessors()); // threadPoolScheduler.setRemoveOnCancelPolicy(true); return threadPoolScheduler; } }
本文标签: 报错WebSocketSpringBootundertowtype
版权声明:本文标题:记一次springboot undertow + websocket 报错:but was actually of type ‘org.springframework.beans.factory 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1726603377a1077283.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论