为何spring quartz 定点不执行,但每隔一段时间可以执行

cronExpression如果配成“0 0 11 * * ?”,11点的时候没执行;
但配成“0 0/1 * * * ?”,每隔一分钟是执行的,请问一下是怎么回事?

7个回答

楼主的时区设置有问题
jvm启动参数加上这个
-Duser.timezone=GMT+08

QQ1079671992
QQ1079671992 虽然自己还没有遇到,但是下次碰到这种问题时至少知道有这么个因素了。
接近 8 年之前 回复
liu_qchao
liu_qchao 太对了,感谢
接近 8 年之前 回复
ll89308839
ll89308839 操作系统的时区和jvm可能不一样,你自己在程序里面跑个时间看看就知道了,你每分钟跑没有问题,说明你的配置是对的,还有你11点执行的表达式没有写错,所以就是你的时区的导致这样的问题
接近 8 年之前 回复
liu_qchao
liu_qchao 不行啊,win7的操作系统,默认就是东八区
接近 8 年之前 回复

表达式写错了吧。
Cron表达式是一个字符串,字符串以5或6个空格隔开,分开工6或7个域,每一个域代表一个含义,Cron有如下两种语法
格式:
Seconds Minutes Hours DayofMonth Month DayofWeek Year 或
Seconds Minutes Hours DayofMonth Month DayofWeek
每一个域可出现的字符如下:
代码
Seconds:可出现,- * / 四个字符,有效范围为0-59的整数

Minutes:可出现,- * / 四个字符,有效范围为0-59的整数

Hours:可出现,- * / 四个字符,有效范围为0-23的整数

DayofMonth:可出现,- * / ? L W C八个字符,有效范围为0-31的整数

Month:可出现,- * / 四个字符,有效范围为1-12的整数或JAN-DEc

DayofWeek:可出现,- * / ? L C #四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推

Year:可出现,- * / 四个字符,有效范围为1970-2099年

你的表达式改成这样试试,[code="java"]0 0 11 0 * ? *[/code]
参考资料:[url]http://haiziwoainixx.iteye.com/blog/1179071[/url]

liu_qchao
liu_qchao “0 0 11 * * ?”不就是每天11点执行吗?我试了楼上的也不执行啊
接近 8 年之前 回复

看起来写的是对的,你可以这样测试,schedule以后,用Scheduler的方法getTrigger,然后再Trigger.getNextFireTime, 看看返回的下一次触发事件对不对;对的话表达式就没问题,就需要找别的问题。

liu_qchao
liu_qchao 确实是好方法,发现是时区不对,最佳答案只能选一个,不好意思
接近 8 年之前 回复

LZ,你的需求是每天11点运行一次吧?

试一下这个表达式“0 0 11 * * ? *”

liu_qchao
liu_qchao 跟我这个一样啊,最后的*是可以省略的
接近 8 年之前 回复

楼主你确定你是把机器系统时间跳到11点之前(比如10:59),等着看他11点的时候是否执行了的,是吗?

liu_qchao
liu_qchao 是的,win7系统
接近 8 年之前 回复

cron="0 0 11 * * ?" 试试这个。

jadethao
jadethao 这么写的是没问题的,我这么用完全可以执行。你看看是不是其他地方配置有问题。
接近 8 年之前 回复
liu_qchao
liu_qchao 我就是这么写的啊
接近 8 年之前 回复

应该是你配置问题,你隔段时间执行说明程序没问题的,你可以看下corn表达式研究下。

liu_qchao
liu_qchao 表达式无问题,是时区不对
接近 8 年之前 回复
立即提问