Мое требование - создать планировщик Quartz с триггером, который запускается с заданным интервалом минут или часов между временем начала и временем окончания в заданные дни недели. В настоящее время я использую приведенный ниже код для конструктора триггеров, и он отлично работает локально.
public Trigger createDailyTimeIntervalTrigger(String jobName, String jobGroup, Set<Integer> daysOfWeek, LocalTime fromTime, LocalTime toTime, int timeInterval, IntervalUnit timeIntervalUnit) {
Date nowDate = dateTimeFormat.getNowTimeDate();
return TriggerBuilder.newTrigger().withIdentity(jobName, jobGroup).startAt(nowDate)
.withSchedule(dailyTimeIntervalSchedule()
.onDaysOfTheWeek(daysOfWeek)
.startingDailyAt(TimeOfDay.hourAndMinuteOfDay(fromTime.getHour(), fromTime.getMinute()))
.endingDailyAt(TimeOfDay.hourAndMinuteOfDay(toTime.getHour(), toTime.getMinute()))
.withInterval(timeInterval, timeIntervalUnit)
)
.build();
}
Здесь пользовательские данные представляют собой набор дней в неделе, время начала и время окончания. Однако эти входные данные передаются из другого часового пояса, и я хочу, чтобы TriggerBuilder
учитывал этот часовой пояс. По-видимому, используемый здесь dailyTimeIntervalSchedule()
не имеет опции .inTimeZone(timeZone)
, как в dailyAtHourAndMinute(hour, minute)
.
Я также рассматривал возможность использования выражений cron напрямую, но, как я понимаю, нельзя поддерживать согласованный временной интервал между несколькими часами, когда интервал не равен 60 раз.