Как запустить задание в первый понедельник месяца с помощью выражения cron весной @Scheduled?

Теперь у меня есть следующее заявление:

@Scheduled(cron = "0 0 12 ? * MON#1")
protected synchronized void execute() {...}

и это не работает:

at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-1.5.9.RELEASE.jar:1.5.9.RELEASE]
Caused by: java.lang.IllegalStateException: Encountered invalid @Scheduled method 'execute': For input string: "2#1"
    at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.processScheduled(ScheduledAnnotationBeanPostProcessor.java:461) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.postProcessAfterInitialization(ScheduledAnnotationBeanPostProcessor.java:331) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:423) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1633) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    ... 19 common frames omitted

Пожалуйста, помогите заставить его работать

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
0
1 284
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Шаблон представляет собой список из шести полей, разделенных одним пробелом: представляющий
второй,
минута,
час,
день,
месяц,
будний день.
Названия месяца и дня недели могут быть даны как первые три буквы английских названий.

Итак, понедельник в первые 7 дней месяца должен дать вам то, что вам нужно.

«0 0 12 1-7 * ПН»

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html

Он будет стрелять каждый понедельник! Я хочу запустить его только на первом

gstackoverflow 03.08.2018 12:42

@gstackoverflow День месяца 1-7 означает, что должны быть первые 7 дней месяца для увольнения. и в первые 7 дней месяца может быть только один понедельник

Navid H 03.08.2018 12:44

хм, действительно имеет смысл

gstackoverflow 03.08.2018 12:45

выражение неверно используйте @Scheduled (cron = "0 0 0? * 2 # 1 *")

См. Ниже для получения дополнительной информации об этом

https://stackoverflow.com/a/26147143/3724760

Вызвано: java.lang.IllegalStateException: обнаружен недопустимый метод @Scheduled 'execute': выражение Cron должно состоять из 6 полей (найдено 7 в "0 0 12? * 2 # 1 *")
gstackoverflow 03.08.2018 12:39

Проверю и расскажу

kvk95 03.08.2018 12:54

Это может сработать для вас

* 6 * 12/1 1

Описание смотрите здесь

https://cronexpressiondescriptor.azurewebsites.net

Другие вопросы по теме