несколько выражений cron из db - PullRequest
0 голосов
/ 24 марта 2019

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

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

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

1 Ответ

0 голосов
/ 28 марта 2019

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

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