spring bootのタイミングタスク

2488 ワード

1.タイミングタスクを有効にする
起動クラスに注釈を追加する@EnableSchedulingは、spring bootのタイミングタスクを有効にする。
2.タイミングタスクの設定ファイル@Configurationによって示されたクラスでは、注釈@EnableAsyncが非同期イベントのサポートを開始することを追加する。設定を追加
/*
             @Value      
    */
    private int corePoolSize = 10;
    private int maxPoolSize = 20;
    private int queueCapacity = 10;

    // Executor   import java.util.concurrent.Executor;
    @Bean
    public Executor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(corePoolSize);
        executor.setMaxPoolSize(maxPoolSize);
        executor.setQueueCapacity(queueCapacity);
        executor.initialize();
        return executor;
    }
このようにする目的はマルチスレッドサポートのタイミングタスクを開くためです。この設定を追加しないと、同時に複数の異なるタイミングタスクが実行されます。タイムミッションがある場合、他のタイミングタスクは実行できません。これを配置すると、各タイミングタスクは個々のスレッドであり、自分で自分のタイミングタスクを実行し、互いに影響を与えない。ただし、例えば、タイミングタスクAは10秒ごとに実行され、一回実行した時に引っかかってしまい、10秒になっても実行が完了していない場合、タイミングタスクAはまた新しいスレッドを起動して実行します。つまり、同時に二つのタイミングタスクAが実行されていますので、この点に注意してください。あなたに影響がありますか?
3.タイミングタスクコードを追加する
タイミングタスクの方法では、注@Asyncを追加します。この注釈を使わないと、やはりスレッドでタイミングタスクを実行します。マルチスレッドではありません。
@Async
@Scheduled(cron = "0/10 * * * * ?")
public void process() {
    logger.info("#################### do something start ######################");


    logger.info("#################### do something end #######################");
}
4.いくつかの書き方:
  • @Schduled(cron="0/10***?")の表現は、何も言われていません。
  • @Scheduled(fixedRate=5000)の感覚は表現と同じで、5秒ごとに
  • を実行します。
  • @Scheduled(fixedDelay=5000)は、テスト結果から見ても、5秒ごとに
  • を実行します。