Spring を使用したカスタム固定レートでのジョブのスケジュール
Spring では、アノテーションを使用してジョブをスケジュールする便利な方法が提供されます。ただし、固定レートを動的に設定する必要がある場合があります。この記事では、Spring のトリガー メカニズムを使用したソリューションを紹介します。
現在のアノテーション ベースのアプローチ
デフォルトでは、fixedRate で @Scheduled を使用して実行間の期間を指定できます。ただし、このレートは静的であり、アプリケーションを再デプロイしない限り変更できません。
解決策: トリガーの使用
注釈に依存する代わりに、カスタム トリガーを構成できます。動的に計算された値に基づいて次回の実行時間を計算します。これを実現する方法は次のとおりです。
1.スケジューリング構成を実装する
SchedulingConfigurer インターフェイスに従う構成クラスを作成します。このクラスは、デフォルトのスケジューラをオーバーライドし、カスタム トリガーを登録します。
@Configuration @EnableScheduling public class MyAppConfig implements SchedulingConfigurer { // ... }
2.トリガーを定義する
次回の実行時間を返すトリガーを実装します。この例では、環境に保存されている myRate プロパティに基づいて次回を計算します。
@Override public Date nextExecutionTime(TriggerContext triggerContext) { Calendar nextExecutionTime = new GregorianCalendar(); Date lastActualExecutionTime = triggerContext.lastActualExecutionTime(); nextExecutionTime.setTime(lastActualExecutionTime != null ? lastActualExecutionTime : new Date()); nextExecutionTime.add(Calendar.MILLISECOND, env.getProperty("myRate", Integer.class)); //you can get the value from wherever you want return nextExecutionTime.getTime(); }
3.トリガーの登録
スケジューリング構成クラスで、タスクのトリガーを登録します。
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { // ... taskRegistrar.addTriggerTask( new Runnable() { @Override public void run() { myBean().getSchedule(); } }, new Trigger() { // ... (Your trigger implementation) } ); }
このアプローチを使用すると、スケジュールされたジョブの固定レートを動的に設定できます。を使用すると、アプリケーションを再デプロイせずに調整できます。
以上が春に動的に調整可能な固定レートでジョブをスケジュールするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。