在Spring中编写cron表达式
作者:互联网
我正在使用springs任务计划程序(ConcurrentTaskScheduler)来计划我的任务.
我正在使用API
public ScheduledFuture schedule(Runnable task,Trigger trigger)
执行任务.我使用的触发器是CronTrigger.
我正在使用以下语句初始化触发器
Trigger trigger = new CronTrigger(cronExp);
我需要以某种方式编写cronExp,使其在特定日期开始并从那时起每天执行.
我签出了ConcurrentTaskScheduler的API,但是我可以找到合适的API来实现/我可能错过了一些API.
有人可以建议我达到上述要求的方法吗?
解决方法:
据我所知,您不能使用Spring的CronTrigger仅从某个日期开始.
Cron语法不支持从任意日期开始每天运行某些内容;它支持EITHER每天运行某些内容,或者在任意日期运行一次-但不能同时运行一次.这意味着您可以使用两个触发器:将一个cron触发器设置为在开始日期时触发;然后在首次触发时创建一个新的每日触发.
但是,这仅在您使用的cron触发器支持年份的情况下才能正常使用,例如Quartz在cron触发器中具有选项year字段. Spring的CronTrigger不支持多年.因此,如果您确实尝试为某个特定日期(例如澳大利亚日中午0 0 12 26 1?)安排时间,那么它将每年运行,而不仅仅是运行一次,从而导致每年重复创建触发器.
相反,我建议创建一个简单的触发器每天运行,即:
Trigger trigger = new CronTrigger("0 0 12 * * ?);
因此,您的代码将每天运行.然后在代码中添加一个简单的日期检查:如果您尚未达到开始日期,则跳过您的任务,即:
if ((new Date()).after(startDate)) {
// Run your task here
}
标签:cronexpression,spring,crontrigger 来源: https://codeday.me/bug/20191102/1994380.html