Spring ベースの@Scheduled cron ジョブのタイムゾーンを設定するにはどうすればよいですか?
バックグラウンド:
@Scheduled
Spring のアノテーションを使用して、1 日 1 回、たとえば午後 2 時に実行するジョブがあります。
@Scheduled(cron = "0 0 14 * * *")
public void execute() {
// do scheduled job
}
TimeZone.getDefault()
問題は、Spring が内部的に on を使用するため、異なるサーバー間で 2 PM が異なることです。さらに、JavaDocには次のようにTimeZone.getDefault()
記載されています。
このホストのデフォルトの TimeZone を取得します。デフォルトの TimeZone のソースは、実装によって異なる場合があります。
つまり、時間帯は決まっていません。これは、JVM の実装、サーバーのタイム ゾーン構成、サーバーの場所、および / またはその他の未知の要因に依存する場合があります。その結果、使用するタイムゾーンを明示的に設定する方法がない限り、cron ジョブは異なるサーバーで異なる時間にトリガーされますか?
Spring 3.2.2 を使用しています。
アップデート
Spring 4 の時点で、Spring Jira の問題SPR-10456が解決されました。したがって、@Scheduled
アノテーションにはまさにこの目的のための新しいゾーン属性があります。