集群环境下,谁偷走quartz配置的定时任务

简介:

错误现象:

在本地开发环境中,应用服务启动后TRIGGER_STATE直接就变为ERROR

 

 前段时间在项目中,使用quartz配置一个定时任务,定时任务都持久化到oracle数据库中,但是应用服务器启动后,数据库qrtz_triggers(trigger信息表)中,对应的任务数据的TRIGGER_STATE字段就直接变为ERROR,导致定时任务不执行。

 

没有错误log日志,出错原因难定位。

对以下可能出错的原因进行了调查:

1.quartz文件配置错误

   检查配置文件,调查结果是,配置文件没有发现错误。

   项目中已经配置有一条定时任务A,但是任务A能正常执行。

   将任务Aquartz配置注释,只留下新增配置的定时任务,启动后还是一样报错。

项目中,其他子系统也使用了quartz配置定时任务,可以排除不是quartz配置文件错误。

 

2.定时任务实现类出错

   定时任务实现类中,将业务逻辑全部注释,只输出system.out.println,但启动后,也报错。(经过很多次的调试,有时应用服务器启动,也能正常的执行一次新增的定时任务,但后面TRIGGER_STATE就又变为ERROR

   将新增的定时任务配置的时间,由2分钟改为10秒后,定时任务能正常运行。

 

3.发现数据库qrtz_scheduler_state(调度器状态表)中,有很多条数据。表示有很多实例应用都在运行quartz

 

经过这些测试和调查,发现是其它机器可能将新增的定时任务取走执行,但是其它机器上又没有配置该新增定时任务,然后再调度该任务的时候就将数据库qrtz_triggersTrigger信息表)中,对应的任务数据的TRIGGER_STATE字段变为ERROR

 

综上所述,本地开发环境下,项目组成员使用同一数据库进行开发时,每位开发人员在quartz中,配置的定时任务数量不一致。当应用服务启动后,quartz任务调度器会根据数据库qrtz_triggerstrigger信息表)中的数据执行Job,数据库中已经存在新增的定时任务,而取走的应用服务quartz配置中并没有配置该新增定时任务,执行时就将TRIGGER_STATE变为ERROR,导致新增Job不能正常执行。

 

建议:

使用quartz配置定时任务,多台服务器使用同一数据库进行开发时,保证数据库qrtz_scheduler_state(任务调度表)中只有一条数据,这样就能保证定时任务是自己的应用服务取走执行的。


目录
相关文章
|
24天前
|
Java 调度 Spring
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
44 0
|
存储 负载均衡 监控
分布式定时任务,你了解多少?基于Quartz实现分布式定时任务解决方案!
定时任务系统在应用平台中的重要性不言而喻,特别是互联网电商、金融等行业更是离不开定时任务。在任务数量不多、执行频率不高时,单台服务器完全能够满足。但是随着业务逐渐增加,定时任务系统必须具备高可用和水平扩展的能力,单台服务器已经不能满足需求。因此需要把定时任务系统部署到集群中,实现分布式定时任务系统集群。
4079 1
分布式定时任务,你了解多少?基于Quartz实现分布式定时任务解决方案!
|
28天前
|
Linux Shell 调度
linux脚本任务调度
Linux的`crontab`用于计划任务,按照预设时间执行脚本或命令。步骤包括:1) 创建并赋予执行权限的脚本,如`backup.sh`;2) 使用`crontab -e`编辑任务列表;3) 添加cron表达式(如`0 1 * * * /path/to/backup.sh`,表示每天凌晨1点执行脚本);4) 保存并启动/检查cron服务。cron表达式包含分钟、小时、日期、月份和周几字段。根据需求调整表达式以满足不同任务需求。
12 3
|
7月前
|
缓存 Linux 调度
分布式定时任务
分布式定时任务
108 0
分布式定时任务
|
8月前
|
存储 Java 关系型数据库
分布式定时任务框架Quartz总结和实践(2)—持久化到Mysql数据库
本文主要介绍分布式定时任务框架Quartz集成SpringBoot持久化数据到Mysql数据库的操作,上一篇文章使用Quartz创建定时任务都是保存在内存中,如果服务重启定时任务就会失效,所以Quartz官方也提供将定时任务等信息持久化到Mysql数据库的功能,本文主要实现这种Quartz的这种使用方式。
428 0
分布式定时任务框架Quartz总结和实践(2)—持久化到Mysql数据库
|
8月前
|
存储 开发框架 Java
分布式定时任务框架Quartz总结和实践(1)
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。
102 0
|
9月前
|
Java 应用服务中间件 Spring
Jeesite中部署定时任务,定时任务tomcat部署详细,定时任务在spring项目中部署
Jeesite中部署定时任务,定时任务tomcat部署详细,定时任务在spring项目中部署
209 0
|
存储 运维 Java
分布式定时任务-Quartz
分布式定时任务-Quartz
分布式定时任务-Quartz
|
XML Java 网络虚拟化
定时任务莫名停止,Spring 定时任务存在 Bug???
Hello~各位读者新年好,我是鸭血粉丝(大家可以称呼我为「阿粉」)。这里阿粉给大家拜个年,祝大家蒸蒸日上烫烫烫,年年有余屯屯屯。
定时任务莫名停止,Spring 定时任务存在 Bug???
|
弹性计算 运维 自然语言处理
ElasticJob-分布式作业调度神器,你们还在用Quartz吗?!
简介 Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。 Elastic-Job-Lite定