@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异常的资料请关注我们其它相关文章!

(0)

相关推荐

  • Spring Cloud @RefreshScope 原理及使用

    @RefreshScope那些事 要说清楚RefreshScope,先要了解Scope Scope(org.springframework.beans.factory.config.Scope)是Spring 2.0开始就有的核心的概念 RefreshScope(org.springframework.cloud.context.scope.refresh)是spring cloud提供的一种特殊的scope实现,用来实现配置.实例热加载. Scope -> GenericScope -> R

  • @RefreshScope 自动刷新配置文件的实例讲解

    1.在类上加@RefreshScope注解. 2.引入配置@Value. /** * @author 向振华 * @date 2018/12/17 17:20 */ @RefreshScope //配置文件自动刷新 @RestController @RequestMapping("test") public class TestController { @Value("${test.xzh}") //引入配置 private String xzh; @Request

  • Springboot使用@RefreshScope注解实现配置文件的动态加载

    目录 pom.xml properties 启动类 配置类 controller 打包 springcloud对应的springboot版本 参考: spring-boot-starter-actuator提供服务健康检查和暴露内置的url接口. spring-cloud-starter-config提供动态刷新的一些支持和注解. pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xml

  • SpringBoot @Scope与@RefreshScope注解使用详解

    目录 前言 @Scope注解 @RefreshScope刷新bean 刷新Environment对象 重新创建RefreshBean @RefreshScope代理对象 前言 在SpringIOC中,我们熟知的BeanScope有单例(singleton).原型(prototype), Bean的Scope影响了Bean的管理方式,例如创建Scope=singleton的Bean时,IOC会保存实例在一个Map中,保证这个Bean在一个IOC上下文有且仅有一个实例.SpringCloud新增了一

  • SpringCloud的@RefreshScope 注解你了解吗

    目录 pom.xml properties 启动类 配置类 controller 打包 springcloud对应的springboot版本 参考: 总结 spring-boot-starter-actuator提供服务健康检查和暴露内置的url接口. spring-cloud-starter-config提供动态刷新的一些支持和注解. pom.xml <?xml version="1.0" encoding="UTF-8"?> <project

  • Android audio音频流数据异常问题解决分析

    目录 一.背景 二.Android Audio 音频系统 1. 音频链路 2. 音频链路关键节点: 3. 音频库的选择 三.案例分析 1. 声音忽大忽小问题 具体分析 2. 应用卡顿问题 具体分析 四.总结 一.背景 在 Android 系统的开发过程当中,音频异常问题通常有如下几类,无声,调节不了声音,爆音,声音卡顿,声音效果异常(忽大忽小,低音缺失等)等. 尤其声音效果这部分问题通常从日志上信息量较少,相对难定位根因.想要分析此类问题,便需要对声音传输链路有一定的了解,能够在链路中对各节点的

  • Mybatis foreach标签使用不当导致异常的原因浅析

    异常产生场景及异常信息 上周,由于在Mybatis的Mapper接口方法中使用实现了Map.Entry接口的泛型类,同时此方法对应的sql语句也使用了foreach标签,导致出现了异常.如下为异常信息: org.apache.ibatis.exceptions.PersistenceException: ### Error updating database. Cause: org.apache.ibatis.reflection.ReflectionException: There is no

  • springmvc级联属性处理无法转换异常问题解决

    这篇文章主要介绍了springmvc级联属性处理无法转换异常问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 两点要注意, 1. 在mapper的xml文件里,对应的需要填写级联字段,如 <insert id="addAdmin" useGeneratedKeys="true" keyProperty="id" parameterType="cn.taotao.bean.A

  • C# wpf解决Popup弹出位置异常问题解决

    目录 问题描述 原因分析 解决方法 问题描述 使用Popup控件作为弹出框,使用相对位置弹出即Placement="Relative",在不同的设备中弹出的位置不一致.比如下面的例子. 使用如下代码: <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http

  • 基于java涉及父子类的异常详解

    java中的异常涉及到父子类的问题,可以归纳为一句话:子类的构造函数抛出的异常必须包含父类的异常,子类的方法可以选择抛出"范围小于等于"父类的异常或不抛出异常. 1. 为什么构造函数必须抛出包含父类的异常? 在<thingking in java>中有这么一段话: 异常限制:当覆盖方法时,只能抛出在基类方法的异常说明中列出的那些异常 异常限制对构造器不起作用,你会发现StormyInning的构造器可以抛出任何异常,而不必理会基类构造函数所抛出的异常.然而因为必须构造函数必

  • 分页类,异常类

    其它的一些,比如分页类,异常类(用于信息提示),文件操作类(未完成),经常用到的工具类及验证输入的表单验证类(ASP版,配合前台JS版使用更佳): 分页类Pager <% Class Pager Private IUrl Private IPage Private IParam Private IPageSize Private IPageCount Private IRecordCount Private ICurrentPageIndex Public Property Let Url(By

  • python类的实例化问题解决

    类的实例化问题解决 运行结果: line 21, in <module> s=speaker('ken',10,'aaa') TypeError: __init__() missing 1 required positional argument: 'h' 错误要点:定义类的时候是四个参数,在实例化的时候也必须是四个,不能因为用不到而不写. 这是因为:类定义了 __init__() 方法,类的实例化操作会自动调用 __init__() 方法.实例化和定义的不匹配,当然报错了. 以上就是本文的全

  • python上下文管理器异常问题解决方法

    对于异常的使用上,当我们在捕捉到错误时,会有一个抛出的选项让我们做决定.不过加入了上下文管理器后,就不用对异常进行选择了,因为其作用是不必抛出.下面我们就python上下文管理器处理异常进行说明,分析其中的三个参数,最后带来一个处理异常的实例供大家进行学习. 1.异常说明 异常可以在__exit__ 进行捕获并由你自己决定如何处理,是抛出还是不抛出.在__exit__ 里返回 True(没有return 就默认为 return False),就相当于告诉 Python解释器,这个异常我们已经捕获

  • Java Quartz触发器CronTriggerBean配置用法详解

    CronTrigger表达式分为七项子表达式,其中每一项以空格隔开,从左到右分别是:秒,分,时,月的某天,月,星期的某天,年:其中年不是必须的,也就是说任何一个表达式最少需要六项!  例:0 0 12 ? * WED 表示每个星期三的12点执行,这里没有"年"这项!  字段名(项)  必须  值范围  特殊字符  秒 是 0-59  , - * /   分 是 0-59  , - * /   时 是 0-23  , - * /   月的某天  是 1-31  , - * ? / L W

  • Spring定时任务中@PostConstruct被多次执行异常的分析与解决

    发现问题 最近在项目中刚刚修改一个功能,代码正准备验证,启动Idea的debug模式,运行项目,发现启动失败,查看日志发现定时任务被重复执行,导致异常.debug定时任务的初始化类,发现启动定时任务是在@PostConstruct方法中执行的,网上查询,有说Spring在某种情况下初始化有bug,注解@Component可能出现多次执行.把@Component修改为@Service就行了! 结果我改了也没解决问题! 无赖更一步跟进日志,发现以下内容: [ERROR][2017-06-20 19:

随机推荐