其他分享
首页 > 其他分享> > 在Spring中编写cron表达式

在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