Несколько выражений cron из базы данных

У меня есть приложение Spring Boot, и есть несколько процессов, которые запускаются каждый час. Для этого я использую @Scheduled с выражением cron.
Теперь у меня есть запрос на изменение, который заключается в том, чтобы позволить изменению пользовательского интерфейса изменить частоту процессов во время выполнения, которая указана в таблице базы данных, подобной приведенной ниже.

Table:
Id,  name,   cronexp,      some_foreing_key
1,  "John",  "0 0 1 * * *",  4
2,  "Steve", "0 0 2 * * *",  8

На данный момент я предполагаю, что, возможно, есть метод, аннотированный @Scheduled, который выполняется каждые несколько минут, а затем каким-то образом проверяет время, прошедшее с этими выражениями. Есть идеи?

Я получаю на 100% то, чего вы хотите достичь, но я должен сказать вам, что параметры аннотации @Scheduled не могут быть изменены динамически после того, как вы их установили. Я бы также предложил изменить структуру вопроса, чтобы предоставить дополнительную информацию о вашем варианте использования.

akortex 23.03.2019 23:57

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

lzagkaretos 24.03.2019 16:13

ПРОВЕРЬТЕ этот вопрос stackoverflow.com/questions/41186633/весеннее-обновление-планировщик

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

Ответы 1

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

Я использовал @Scheduled вместе с Quartz.
@Scheduled проверяет выражение cron каждую минуту, используя CronExpression.isStatisfiedBy.
Выражение может быть таким: * 0/30 * * * ?, что означает, что проверка будет сделана к минуте 0 и минуте 30, и именно поэтому нам нужно проверять каждую минуту: потому что она должна соответствовать именно этим отдельные минуты. Также по той же причине выражение cron из БД должно исключать секунды или начинаться с *.

@Scheduled(cron = "0 */1 * * * ?")
public checkSchedules() {
...
CronExpression cronExpression = new CronExpression(cronExpressionStringFromDB);
  if (cronExpression.isSatisfiedBy(new Date())) {
     //run stuff
  } 
}

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