Как запустить кварцевую работу на каждый рабочий день месяца - PullRequest
1 голос
/ 17 апреля 2019

Мне нужно выполнить задание, которое должно запускаться в первый рабочий день каждого месяца, также мне нужно убрать выходные и получить первый рабочий день каждого месяца.

FE: первое мая - выходной, так что задание должно выполняться во второй день мая.

для других заданий, которые я использую ниже, код.

 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 ]

2 голосов
/ 17 апреля 2019

CRON не поддерживает и, вероятно, никогда не поддерживает какой-либо механизм, распознающий, является ли праздник в текущем или заданном месте. Праздники противоречивы в разных странах, а иногда и в провинциях (обычно в географически крупных странах).

Эта функция была бы очень сложной для таких простых в использовании обозначенных выражений, как CRON.

Единственная возможная вещь, которую вы можете сделать, это запускать каждый день с понедельника по пятницу (2-6) независимо от выходных. Если выражение 2-6 или MON-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 голос
/ 17 апреля 2019

Реализация этого требования с помощью выражений cron, вероятно, будет слишком сложной. Я бы пошел с выражением cron, которое работает с понедельника по пятницу, т.е. г.

0 3 45 * * MON-FRI

и проверьте, является ли текущий день выходным днем ​​в работе, сверяясь со списком дат.

...