@RefreshScope在Quartz 触发器类导致异常问题解决分析

 更新时间:2023年02月10日 17:12:17   作者:毕小宝  
这篇文章主要为大家介绍了@RefreshScope在Quartz 触发器类导致异常问题解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

背景

承接上篇,测试过程中又遇到了 Nacos Config 的动态刷新注解 @RefreshScope 与 Quartz 框架结合的问题,Bug 排查路上,顺手记录一下吧。

问题

有个模块使用了Quartz ,通过配置控制任务调度的周期和分组名称。

因为引用了动态配置,所以对每个注入类都加上了 @RefreshScope ,代码如下:

@Value("${quartz.task.cron}")
private String taskCron;
@Bean
public JobDetail taskJobDetail(){
    JobDetail jobDetail = JobBuilder.newJob(XXTaskJob.class)
            .withIdentity("taskName","taskGroup")
            .storeDurably()
            .build();
    return jobDetail;
}
@Bean
@RefreshScope
public Trigger taskTrigger() {
    Trigger trigger = TriggerBuilder.newTrigger()
            .forJob(taskJobDetail())
            .withIdentity("taskName","taskGroup")
            .startNow()
            .withSchedule(CronScheduleBuilder.cronSchedule(taskCron))
            .build();
    return trigger;
}

启动应用报错:

自动注入 Quartz 的 Scheduler 对象异常了,因为有了上次 RestTemplate 失效的经验,所以一猜就是这个注解的问题,去掉后果然正常了。

话说回来,到底 Quartz 注入的类到底能不能动态根据配置变动呢?如果真的要支持定时任务周期和分组名称动态变动,应该怎么改造呢?

启示录

今天看到两个关于编程的观点。

言论一:《现代编程工作的实质》

我真正担心的是,今天的很多编程没有任何乐趣,它只是集合别人的软件,把组件拼起来并启动,不需要太多的创造力。 我担心编程会变得太无聊,因为你没有机会做任何新鲜事。你的兴奋来自于看到机器产生出来的有趣结果,而不是来自创造新事物的过程。现在的乐趣变成,当你完成无聊的工作后,会突然得到一个很棒的结果,但在以前,工作本身并不乏味。

另一句来自 Redis 的作者:

大多数编程不再是艺术,也不再是高级工程。大多数程序都是微不足道的:编码人员只需要理解某些特定的接口,然后编写一些逻辑和胶水代码。 -- Antirez,Redis 的作者

工具人的悲哀!我还以为只有我有类似的感觉呢,SpringBoot 这么强大,开源工具这么丰富,任意一个第三方 jar 的引入,背后都是一个大黑盒,不经过透彻的测试,根本不知道有什么问题。

以上就是@RefreshScope在Quartz 触发器类导致异常问题解决分析的详细内容,更多关于@RefreshScope Quartz异常的资料请关注脚本之家其它相关文章!

相关文章

  • 一文详解Java中流程控制语句

    一文详解Java中流程控制语句

    在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说,程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。本文就来通过一些示例带大家详细了解一下
    2022-10-10
  • 如何在Spring Boot应用中优雅的使用Date和LocalDateTime的教程详解

    如何在Spring Boot应用中优雅的使用Date和LocalDateTime的教程详解

    这篇文章主要介绍了如何在Spring Boot应用中优雅的使用Date和LocalDateTime,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • SpringBoot里使用Servlet进行请求的实现示例

    SpringBoot里使用Servlet进行请求的实现示例

    这篇文章主要介绍了SpringBoot里使用Servlet进行请求的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 详解Spring Boot最新版优雅停机的方法

    详解Spring Boot最新版优雅停机的方法

    这篇文章主要介绍了Spring Boot最新版优雅停机的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • java利用递归调用实现树形菜单的样式

    java利用递归调用实现树形菜单的样式

    这篇文章主要给大家介绍了关于java利用递归调用实现树形菜单样式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • Java后端登录实现返回token

    Java后端登录实现返回token

    本文主要介绍了Java后端登录实现返回token,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • SpringBoot接口加密解密统一处理

    SpringBoot接口加密解密统一处理

    这篇文章主要为大家详细介绍了SpringBoot接口加密解密统一处理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • java正则表达式对特殊字符的转义以及异常现象

    java正则表达式对特殊字符的转义以及异常现象

    这篇文章主要给大家介绍了关于java正则表达式对特殊字符的转义以及异常现象的相关资料,在Java中使用正则表达式匹配特殊字符也需要使用转义字符"\",需要的朋友可以参考下
    2023-06-06
  • SpringBoot+jsp项目启动出现404的解决方法

    SpringBoot+jsp项目启动出现404的解决方法

    这篇文章主要介绍了SpringBoot+jsp项目启动出现404的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • JDK17、JDK19、JDK1.8轻松切换(无坑版,小白也可以看懂!)

    JDK17、JDK19、JDK1.8轻松切换(无坑版,小白也可以看懂!)

    在做不同的java项目时候,因项目需要很可能来回切换jdk版本,下面这篇文章主要介绍了JDK17、JDK19、JDK1.8轻松切换的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-02-02

最新评论