当前位置: 首页 > news >正文

springboot定时任务:同时使用定时任务和websocket报错

背景

项目使用了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]

在这里插入图片描述
具体代码【】

    @Primary@Beanpublic 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();
http://www.lryc.cn/news/139834.html

相关文章:

  • CSS3渐变及2D转换
  • 无涯教程-PHP - eregi()函数
  • Spring与Mybatis整合aop整合pageHelper分页插件
  • SSL/CA 证书及其相关证书文件(pem、crt、cer、key、csr)
  • 【JavaSE】内部类
  • Django(2)-编写你的第一个 Django 应用
  • 燃气管网监测系统,24小时守护燃气安全
  • 昌硕科技、世硕电子同步上线法大大电子合同
  • es的索引管理
  • Rust 的四大类型的宏 (元编程)
  • 探索数据湖中的巨兽:Apache Hive分布式SQL计算平台浅度剖析!
  • Node.js 的 Buffer 是什么?一站式了解指南
  • 延时盲注技术:SQL 注入漏洞检测入门指南
  • 【Midjourney电商与平面设计实战】创作效率提升300%
  • URI、URL、URIBuilder、UriBuilder、UriComponentsBuilder说明及基本使用
  • 抓包 - 简要总结 - Windows和Android抓包
  • iOS脱壳技术(二):深入探讨dumpdecrypted工具的高级使用方法
  • 4.RabbitMQ高级特性 幂等 可靠消息 等等
  • ES常见错误总结
  • 35、下载、安装 jdk11 记录,Idea中把项目从 jdk8 换 jdk 11
  • TinyVue - 华为云 OpenTiny 出品的企业级前端 UI 组件库,免费开源,同时支持 Vue2 / Vue3,自带 TinyPro 中后台管理系统
  • ubuntu下自启动设置,为了开机自启动launch文件
  • 脚本:PDF文件批量转换成图片(python3)
  • Spring和mybatis整合
  • 应知道的python基础知识
  • FFmpeg<第一篇>:环境配置
  • 深度学习:Sigmoid函数与Sigmoid层区别
  • ❤ Ant Design Vue 2.28的使用
  • R语言02-R语言中的向量
  • windows linux 都可执行的脚本 bat, shell 共存