错误现象:
在本地开发环境中,应用服务启动后TRIGGER_STATE直接就变为ERROR
前段时间在项目中,使用quartz配置一个定时任务,定时任务都持久化到oracle数据库中,但是应用服务器启动后,数据库qrtz_triggers(trigger信息表)中,对应的任务数据的TRIGGER_STATE字段就直接变为ERROR,导致定时任务不执行。
没有错误log日志,出错原因难定位。
对以下可能出错的原因进行了调查:
1.quartz文件配置错误
① 检查配置文件,调查结果是,配置文件没有发现错误。
② 项目中已经配置有一条定时任务A,但是任务A能正常执行。
③ 将任务A的quartz配置注释,只留下新增配置的定时任务,启动后还是一样报错。
项目中,其他子系统也使用了quartz配置定时任务,可以排除不是quartz配置文件错误。
2.定时任务实现类出错
① 定时任务实现类中,将业务逻辑全部注释,只输出system.out.println,但启动后,也报错。(经过很多次的调试,有时应用服务器启动,也能正常的执行一次新增的定时任务,但后面TRIGGER_STATE就又变为ERROR)
② 将新增的定时任务配置的时间,由2分钟改为10秒后,定时任务能正常运行。
3.发现数据库qrtz_scheduler_state(调度器状态表)中,有很多条数据。表示有很多实例应用都在运行quartz。
经过这些测试和调查,发现是其它机器可能将新增的定时任务取走执行,但是其它机器上又没有配置该新增定时任务,然后再调度该任务的时候就将数据库qrtz_triggers(Trigger信息表)中,对应的任务数据的TRIGGER_STATE字段变为ERROR。
综上所述,本地开发环境下,项目组成员使用同一数据库进行开发时,每位开发人员在quartz中,配置的定时任务数量不一致。当应用服务启动后,quartz任务调度器会根据数据库qrtz_triggers(trigger信息表)中的数据执行Job,数据库中已经存在新增的定时任务,而取走的应用服务quartz配置中并没有配置该新增定时任务,执行时就将TRIGGER_STATE变为ERROR,导致新增Job不能正常执行。
建议:
使用quartz配置定时任务,多台服务器使用同一数据库进行开发时,保证数据库qrtz_scheduler_state(任务调度表)中只有一条数据,这样就能保证定时任务是自己的应用服务取走执行的。
相关推荐
Springboot整合Quartz实现定时任务数据库动态配置,新增任务、修改cron表达式、暂停任务、恢复任务、删除任务等操作
基于SSM+quartz的定时任务管理demo
定时任务quartz实现分组串行并行动态配置
NULL 博文链接:https://medbricom.iteye.com/blog/1782765
1、若是部署多台机器,到了时间点,只有一台会执行,其他不会执行。 2、若多个节点其中一个scheduler执行job失败,将会被另外一个scheduler执行
C# Quartz.Net定时任务操作明细、完整过程 每种场景均有涉及,代码Copy稍作修改就可使用
SpringBoot2 与 Quartz 整合的Demo。 后台可添加、修改、移除 定时任务。 也可查看当前任务的状态 灵活的定时任务
quartz 动态定时任务 根据数据库数据配置动态定时任务
spring+springMVC+mybatis+quartz动态定时任务
Spring + quartz 定时任务修改定时时间不重启服务
spring-cloud-alibaba+dubbo+nacos+quartz以yml配置方式实现
在实际项目应用中经常会用到定时任务,可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间、频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quartz与spring的组合...
Quartz定时任务
Quartz.net作业调度自定义定时执行任务多任务执行c#,定时执行任务,如超时取消订单,自动确认收货等等
SpringBoot集成Quartz完全分布式定时任务,即插即用,不好用直接捶我! SpringBoot集成Quartz分布式定时任务 SpringBoot集成Quartz分布式定时任务
quartz定时任务使用例子大全,这里面介绍了三种使用quartz定时任务的方式,第一种方式是完全使用代码写死的调用方式,第二种使用的是从数据库读取任务配置信息的调用方式,第三种是使用从数据库读取任务配置,生成...
Quartz定时任务框架,本次小白使用它实现一个简单的定时任务。每隔3秒打印一次Hello。这个是例子的jar包,实现过程在博客首页可看到。
C# quartz.net 定时任务源码,实现了远程操控.动态追加dll,可以安装到windows服务中.
springboot jpa quartz 动态定时任务,任务增加,任务删除,任务修改demo,非常简单
定时任务demo,Java语言,spring整合quartz配置文件实现定时任务