如何在每月的每个工作日运行石英作业

时间:2019-04-17 08:21:31

标签: java spring cron spring-batch quartz-scheduler

我需要执行一项工作,该工作需要每个月的第一个工作日,也需要删除假期并获得每个月的第一个工作日。

FE:5月1日是假期,因此工作需要在5月第二天进行。

我在下面的代码中使用的其他工作。

 public CronTriggerFactoryBean testBean() {
    CronTriggerFactoryBean bean = new CronTriggerFactoryBean();
    bean.setJobDetail(test().getObject());
    bean.setName("test");
    bean.setGroup("test");
    bean.setCronExpression("0 45 3 ? * *");
    return bean;
}

有什么办法可以解决这个问题?

2 个答案:

答案 0 :(得分:2)

CRON可能并且永远不会支持任何机制来识别当前位置或给定位置的假期。假期在国家之间不一致,有时甚至在各省(通常是地理上较大的国家)之间也是如此。

对于诸如CRON is这样的易于使用的指定表达式,此功能将非常复杂。

无论假期如何,星期一至星期五(2-6)每天都可以触发的唯一操作。如果2-6MON-FRI表达式不起作用,请使用2,3,4,5,6

bean.setCronExpression("0 45 3 ? * 2-6"); 
// At 03:45:00am, every day between Monday and Friday, every month

免责声明:该周从星期日(1)开始。

答案 1 :(得分:1)

通过cron表达式实现该要求可能会太复杂。 我会采用从周一到周五运行的cron表达式。 g。

0 3 45 * * MON-FRI

,然后通过检查日期列表来检查当前日期是否是工作中的假期。