quartz2.2 不按规定时间执行,有人遇到过吗?

时间:2021-10-28 23:27:17
没用到spring,job实现的是StatefulJob,job 时间规则:0 0 1 2-31 * ?    
应该是每晚1点才执行,但中午11点到5点这段时间居然运行了16次,数据库表里面该job下次执行是2014-08-14 01:00:00,这个没错,但为什么会出现没到规定时间就运行的情况? 昨天也出现了,提前执行了7次。 

execute方法:使用kettle先抽取数据 -> 处理,应该不关kettle的原因吧?

配置文件:

org.quartz.scheduler.instanceName: FpzwcxScheduler
org.quartz.scheduler.instanceId: AUTO
org.quartz.scheduler.skipUpdateCheck: true
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 50
org.quartz.threadPool.threadPriority: 5
org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties: true
org.quartz.jobStore.dataSource: myDS
org.quartz.jobStore.tablePrefix: QRTZ_
org.quartz.dataSource.myDS.driver: com.sybase.jdbc4.jdbc.SybDriver
org.quartz.dataSource.myDS.URL: jdbc:sybase:Tds:192.168.1.113:5000/fpzwcx?language=us_english
org.quartz.dataSource.myDS.user: sa
org.quartz.dataSource.myDS.password: sybase
org.quartz.dataSource.myDS.maxConnections: 10


没多少分了,抱歉。

6 个解决方案

#1


我也正在看Quartz,但不是很懂,有个问题求教一下,0 0 1 2-31 * ?    是不是表示每个月的2号到31号的凌晨1点执行?如果这个月没有31号,是怎么执行的?对CronTrigger的表达式还不是很懂,求教

#2


引用 1 楼 xlxiongliang 的回复:
我也正在看Quartz,但不是很懂,有个问题求教一下,0 0 1 2-31 * ?    是不是表示每个月的2号到31号的凌晨1点执行?如果这个月没有31号,是怎么执行的?对CronTrigger的表达式还不是很懂,求教


简单的测试过,比如2月28号,时间规则 0/5 * * 2-31 * ?,把系统时间设置成23:59:00,当时间到3月1号 00:00:00,job就不执行了,再把时间调到2号,又开始执行。 按时间规则里面L代表最后,但试过 0 0 1 2-L * ? ,报格式错误。

具体这种配置是否完全满足定时任务需求、没有BUG,我也不是100%的保证,如果你测试出什么BUG,欢迎一起交流学习。

#3


表达式没问题,看看哪个地方是不是提前调用了

#4


引用 3 楼 sunjianbo1126 的回复:
表达式没问题,看看哪个地方是不是提前调用了



其他地方没有调用到

#5


顶起  quartz2.2 不按规定时间执行,有人遇到过吗?

#6


每晚1点执行,为什么不用:0 0 1 * * ?

执行多次,会不会其它地方有额外的配置,或者其它程序在这段时间有调用?

#1


我也正在看Quartz,但不是很懂,有个问题求教一下,0 0 1 2-31 * ?    是不是表示每个月的2号到31号的凌晨1点执行?如果这个月没有31号,是怎么执行的?对CronTrigger的表达式还不是很懂,求教

#2


引用 1 楼 xlxiongliang 的回复:
我也正在看Quartz,但不是很懂,有个问题求教一下,0 0 1 2-31 * ?    是不是表示每个月的2号到31号的凌晨1点执行?如果这个月没有31号,是怎么执行的?对CronTrigger的表达式还不是很懂,求教


简单的测试过,比如2月28号,时间规则 0/5 * * 2-31 * ?,把系统时间设置成23:59:00,当时间到3月1号 00:00:00,job就不执行了,再把时间调到2号,又开始执行。 按时间规则里面L代表最后,但试过 0 0 1 2-L * ? ,报格式错误。

具体这种配置是否完全满足定时任务需求、没有BUG,我也不是100%的保证,如果你测试出什么BUG,欢迎一起交流学习。

#3


表达式没问题,看看哪个地方是不是提前调用了

#4


引用 3 楼 sunjianbo1126 的回复:
表达式没问题,看看哪个地方是不是提前调用了



其他地方没有调用到

#5


顶起  quartz2.2 不按规定时间执行,有人遇到过吗?

#6


每晚1点执行,为什么不用:0 0 1 * * ?

执行多次,会不会其它地方有额外的配置,或者其它程序在这段时间有调用?