2017-06-21 9 views
0

春がすばらしくofferszoneの属性に@Scheduledというアノテーションが付いています。プログラムを使用して@Scheduledメソッドにタイムゾーンを指定することを検討しています。プログラムで@Scheduledにタイムゾーンを追加するにはどうすればよいですか?

たとえば、LAとシカゴの両方の建物で、どちらも地元の深夜にランプをオンにしたいとします。私は自分のリポジトリから建物を取得したい。

実行時にタイムゾーンを提供することができますか?

同様:

@Scheduled(cron = "0 0 * * * *", zone = {THE_ZONE}) //midnight 
public void myScheduledMethod() {  
    //...  
    building.toggleLights(); //could be LA or Chicago 
} 

私は@Scheduled方法は非常に方法がそれを行うことはありませんタイムゾーンを提供し、任意の引数を取ることができないことを知っています。

+0

'zone =" $ {zone.property} "のようなものは、このトリックを行うべきです。 –

+0

それは.propertiesファイルから取得できませんか?あなたは答えを投稿してもらえますか?私が従うかわからない – bphilipnyc

+0

いいえ、 'Environment'に委譲すべき' PropertyResolver'を使用します。 –

答えて

0

値式を使用します。

@Scheduled(cron = "0 0 * * * *", zone = "${zone.property}") //midnight 
public void myScheduledMethod() { ... } 

あなたがからの状態としてこれは、あなたがそれらを取得したい場合など

プロパティファイルから読み込まれ、環境変数ENとして設定することができzone.propertyという名前のプロパティを参照するためEnvironmentを使用します。 dbでは、手動でメソッドをスケジュールし、@Scheduleメソッドを使用しないでください。起動時にDBから読み取り、タスクをTaskSchedulerで登録するBeanを作成します。

+0

正確には、私はbeanのルートに行き、より単純な '@ Scheduled'方法を使わないでください。数百の都市に何百もの建物があると想像してみてください。 – bphilipnyc

+0

これは、データベースからスケジュールを読み込んでスケジュールする単一の工場です。データベース情報に基づいてBeanを作成するだけです。 –

関連する問題