广州网站开发招聘信息,soso搜搜,自己电脑做网站访问快吗,大连做网站优化哪家好背景
项目使用了websocket,实现了消息的实时推送。后来项目需要一个定时任务#xff0c;使用org.springframework.scheduling.annotation的EnableScheduling注解来实现#xff0c;启动项目之后报错
Bean com.alibaba.cloud.sentinel.custom.SentinelAutoConfiguration of t…背景
项目使用了websocket,实现了消息的实时推送。后来项目需要一个定时任务使用org.springframework.scheduling.annotation的EnableScheduling注解来实现启动项目之后报错
Bean com.alibaba.cloud.sentinel.custom.SentinelAutoConfiguration of type [com.alibaba.cloud.sentinel.custom.SentinelAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)Destroy method close on bean with name nacosServiceRegistry threw an exception: java.lang.NullPointerException打断点进入代码发现是这个定时任务的bean为null
学习
由于先写的websocket推送消息运行正常。之前一个项目只有一个定时任务没有websocket也是运行正常。综合网友的分析winky_L是因为同时使用定时任务和websocket冲突导致
其他的一些学习kzcming 菜菜菜鸡
解决
1在启动类Application中加入task的initialize。【注意如果继续报错报错信息如下。报错信息解读发现两个定时任务的bean不知道使用哪一个springboot报错这时候在 taskScheduler方法中加上Primary注解告诉springboot使用这个自定义的定时任务】 Method nacosWatch in com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration required a single bean, but 2 were found:- taskScheduler: defined by method taskScheduler in class path resource []- defaultSockJsTaskScheduler: defined by method defaultSockJsTaskScheduler in class path resource [org/springframework/web/socket/config/annotation/DelegatingWebSocketConfiguration.class] 具体代码【】 PrimaryBeanpublic TaskScheduler taskScheduler(){ThreadPoolTaskScheduler taskScheduler new ThreadPoolTaskScheduler();//只有池子里的任务有执行结束后池子之外的任务才有机会被加入执行。// 更糟的情况是当池子里的任务都在因为异常或业务要求比如出错无限重试而导致池子永远无法得到释放将导致固定值之外的任务永远不会被执行//taskScheduler.setPoolSize允许动态设置池子的大小,可动态设置- todo 有隐患taskScheduler.setPoolSize(10);taskScheduler.initialize();return taskScheduler;}求解
问题1 刚开始在config类中添加该TaskScheduler 仍然启动不了然后我放在启动类Application中就能启动成果。不知道这其中的原由 问题2 代码中和的这个线程池初始定义了poolsize,但是这里有隐患。 只有池子里的任务有执行结束后池子之外的任务才有机会被加入执行。 更糟的情况是当池子里的任务都在因为异常或业务要求比如出错无限重试而导致池子永远无法得到释放将导致固定值之外的任务永远不会被执行taskScheduler.setPoolSize允许动态设置池子的大小,可动态设置。看了一篇文章但是还没有头绪daydayup
taskScheduler.setPoolSize(10);taskScheduler.initialize();