Как настроить часовой пояс для задания на основе Spring на основе Spring?
Задний план:
У меня есть работа, которая выполняется один раз в день, например, 2 часа дня, используя аннотацию Spring @Scheduled
:
@Scheduled(cron = "0 0 14 * * *")
public void execute() {
// do scheduled job
}
Проблема в том, что 2 PM отличается между разными серверами, потому что Spring использует внутри TimeZone.getDefault()
внутренне. Более того, JavaDoc TimeZone.getDefault()
утверждает, что:
Получает по умолчанию TimeZone для этого хоста. Источник TimeZone по умолчанию может отличаться в зависимости от реализации.
Другими словами, часовой пояс не определен. Это может зависеть от реализации JVM, конфигурации часового пояса сервера, местоположения сервера и/или других неизвестных факторов. Следовательно, задание cron запускается в разное время на разных серверах, если только не существует способа явно указать, какой часовой пояс должен использоваться?
Я использую Spring 3.2.2.
Обновить
С весны 4 выпущена проблема Spring Jira SPR-10456. Следовательно, аннотация @Scheduled
имеет новый атрибут зоны именно для этой цели.