バッチジョブを一定間隔で実行し、実行時にこのバッチジョブの時刻を変更する必要があります。このために、私はSpringフレームワークの下で提供されている@Scheduled注釈を見つけました。しかし、私は実行時にfixedDelayの値をどのように変更するのかは分かりません。私はいくつかのグーグルで遊んだが、役に立つものは何も見つかりませんでした。実行時にSpringの@Scheduled fixedDelayを変更する方法
答えて
Trigger
を使用すると、次の実行時間を動的に設定できます。ここに私の答えを参照してください:
Scheduling a job with Spring programmatically (with fixedRate set dynamically)
AFAIK Spring APIでは、トリガーを変更するために必要な内部構造にアクセスすることはできません。しかし、あなたは代わりに手動で豆を設定できます。
その後<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="jobDetail" />
<property name="startDelay" value="10000" />
<property name="repeatInterval" value="50000" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger" />
</list>
</property>
</bean>
SchedulerFactoryBeanに記載されているように:
実行時にジョブの動的登録のために、 このSchedulerFactoryBeanにBean参照を使用することへの直接アクセスを取得するにはクォーツスケジューラ (
org.quartz.Scheduler
)。これにより、新しい ジョブとトリガを作成し、 スケジューラ全体を制御して監視することができます。
春ブーツでは、あなたが直接アプリケーションのプロパティを使用することができます!例えば
:
@Scheduled(fixedDelayString = "${my.property.fixed.delay.seconds:60}000")
:あなたはまた、「60」(秒)のデフォルト値を持つように例えば、プロパティが定義されていない場合には、デフォルト値を持つことができること
@Scheduled(fixedDelayString = "${my.property.fixed.delay.seconds}000")
private void process() {
// your impl here
}
注意
他のものは、私が発見さ:
- 方法メソッドがパラメータ
- があってはなりません
- 方法は
private
かもしれ無効にする必要があり、私は便利private
可視性を使用することができるという発見され、この方法でそれを使用:
@Service
public class MyService {
public void process() {
// do something
}
@Scheduled(fixedDelayString = "${my.poll.fixed.delay.seconds}000")
private void autoProcess() {
process();
}
}
ビーイングprivate
の場合、スケジュールされたメソッドはサービスのローカルになり、サービスのAPIの一部にはなりません。
また、この方法では、@Scheduled
メソッドではない値を返すことができます。処理中に何が起こったのかについてのいくつかの情報を提供するために、
public ProcessResult process() {
// do something and collect information about what was done
return processResult;
}
:たとえば、あなたprocess()
方法は次のように見ることができます。
ありがとう、 'fixedDelayString'は私が探していたものです – prettyvoid
偉大な答え。説明したように動作します。 – flash
@Bohemain解決していただきありがとうございますが、fixedDelayはどのように実行時に更新されますか? –
- 1. 変数fixeddelayを伴う@ scheduled annotation
- 2. Spring @Scheduled fixedDelayが期待どおりに動作しない
- 3. Spring @Scheduled注入遅延時間
- 4. 実行時にアンドロイドで実行時にEditTextのテキストを変更する方法
- 5. 実行時にgridview行の色を変更する方法は?
- 6. 実行時にSpringのコンフィグレーションを変更する
- 7. Springで@Scheduledタスクをシャットダウンする
- 8. 実行時に変数タイプを変更する方法
- 9. 実行時にJava Spring Boot Beanを変更する
- 10. 実行時にJFrameのJPanelを変更する方法
- 11. 実行時にページの場所を変更する方法
- 12. 実行時にパラメータの値を変更する方法は?
- 13. 実行時にタブバーのタブを変更する方法
- 14. 実行時にSSRSレポートのデータベースを変更する方法
- 15. DataGrid(ローカリゼーション)の実行時にアプリケーションカルチャを変更する方法は?
- 16. 実行時にダイアログのタイトルを変更する方法は?
- 17. 実行時にWPFウィンドウのコンテンツを変更する方法
- 18. WPF + PRISM実行時にリージョンを変更する方法
- 19. 実行時にローカライズされたイメージを変更する方法
- 20. 実行時にpersistence.xmlを変更する方法
- 21. Symfony 3 - 実行時に設定値を変更する方法
- 22. Install4j:実行時にランチャーをコピーして変更する方法
- 23. 実行時にページフォーマットを変更する方法(jasperreport)
- 24. 実行時にプリズムモジュールを変更する方法
- 25. WPF:実行時にCurrentUICultureを変更する方法
- 26. 実行時にグローバルミュール構成要素を変更する方法
- 27. 実行時にハイバネートマッピングプロパティを変更する方法
- 28. 実行時に列挙を変更する方法(Java)
- 29. 実行時に突堤ログ設定を変更する方法
- 30. 実行時にSpring LocalContainerEntityManageFactoryBeanを変更して、Hibernateダイアレクトを変更します。
私はあなたが最良の答えを受け入れたのを見ますが、未解決の問題がまだ残っています。 NPEの問題は解決しましたか?このためにソリューション全体を投稿することは可能ですか?Cheers – despot
[プログラムでSpringでジョブをスケジュールする(fixedRateを動的に設定する)](http://stackoverflow.com/questions/14630539/scheduling-a-job-with-spring-programmatically-with-fixedrate-set-動的に) –