У меня есть приложение Spring Boot, и есть несколько процессов, которые запускаются каждый час. Для этого я использую @Scheduled с выражением cron.
Теперь у меня есть запрос на изменение, который заключается в том, чтобы позволить изменению пользовательского интерфейса изменить частоту процессов во время выполнения, которая указана в таблице базы данных, подобной приведенной ниже.
Table:
Id, name, cronexp, some_foreing_key
1, "John", "0 0 1 * * *", 4
2, "Steve", "0 0 2 * * *", 8
На данный момент я предполагаю, что, возможно, есть метод, аннотированный @Scheduled, который выполняется каждые несколько минут, а затем каким-то образом проверяет время, прошедшее с этими выражениями. Есть идеи?
Взгляните на библиотеку Quartz, она может помочь вам выполнить необходимые требования.
ПРОВЕРЬТЕ этот вопрос stackoverflow.com/questions/41186633/весеннее-обновление-планировщик




Я использовал @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
}
}
Я получаю на 100% то, чего вы хотите достичь, но я должен сказать вам, что параметры аннотации
@Scheduledне могут быть изменены динамически после того, как вы их установили. Я бы также предложил изменить структуру вопроса, чтобы предоставить дополнительную информацию о вашем варианте использования.