最も簡単な修正、おそらく練習には最適ではない
簡単な修正方法は、if ステートメントをメソッドに追加し、現在の時刻が印刷したい時刻と一致する場合にのみ印刷することです。
Java は常に最高の時刻/日付の実装を持っているわけではありませんが、Java 8 の時点で、新しいライブラリが呼び出されLocalDateTime
、うまく機能します。このシンプルなソリューションには、それを使用するのが最善の策だと思います。
LocalDateTime
現在の時、分、秒を取得するために使用する例を次に示します。年、月、日などにも同様の方法があります。
LocalDateTime now = LocalDateTime.now();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
これを現在のコードと組み合わせて、必要なときにのみ print ステートメントを実行することができます。
@Configuration
@EnableAsync
@EnableScheduling
public class MyComponent {
@Async
@Scheduled(fixedDelay=5000)
public void doSomething() {
LocalDateTime now = LocalDateTime.now();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
if(hour == 10 &&
minute == 34 &&
second < 6) {
System.out.println("Scheduled Task");
}
}
}
時間と 10、分と 34 を比較します。これらの関数は 0 から n-1 までの数値を返すためです。ここで、n は 1 日の時間数または 1 時間の分数です。秒を <6 と比較して、このジョブがいつ開始されても (5 秒ごとに実行されるため)、少なくとも毎日午前 11 時 35 分に印刷されるようにします。
これが最良の選択肢であると断言しようとしているわけではありませんが、間違いなく選択肢の 1 つです。5 秒ごとに LocalDateTime の新しいインスタンスを作成するのは理想的ではありませんが、リソースに問題がなければ問題ありません。
これは、最も美しいまたは最適に設計されたソリューションではありませんが、機能します。これは、迅速な解決策が必要で、このタスクを達成するための正しい「実践」を気にしない場合のオプションです。