前提
Spring BootでWebアプリを作成しています。
作成しているアプリ内に非同期の処理を実装していますので、
非同期処理実行中にアプリをシャットダウンされないよう
下記のようにApplicationクラスで各種設定を行っています。
Java
1@SpringBootApplication 2@EnableAsync 3public class Application extends AsyncConfigurerSupport { 4 5 public static void main(String[] args) { 6 SpringApplication.run(Application .class, args); 7 } 8 9 @Override 10 public Executor getAsyncExecutor() { 11 ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); 12 // 並列処理数の設定 13 executor.setCorePoolSize(1); 14 executor.setQueueCapacity(1); 15 executor.setMaxPoolSize(10); 16 // 実行中のタスク、並列処理用キュー内のタスクが完了時にshutdownするように設定 17 executor.setWaitForTasksToCompleteOnShutdown(true); 18 // shutdown時に非同期処理の実行完了を最大15分待つ ←これは必要? 19 executor.setAwaitTerminationSeconds(60 * 15); 20 // スレッド名を設定 21 executor.setThreadNamePrefix("hogeThread-"); 22 executor.initialize(); 23 return executor; 24 } 25}
質問内容
setWaitForTasksToCompleteOnShutdown
を"true"にセットすることで
非同期処理の完了を待ってからアプリがシャットダウンされるものと思っておりますが、
setAwaitTerminationSeconds
を設定するとその待ち時間を設定できるということなのでしょうか?
例えば、あと1時間以上かかる非同期処理が実行中に
アプリのシャットダウンコマンドが飛んできたとします。
その時に、setAwaitTerminationSeconds
に"30分"と設定していれば
30分待って、非同期処理が実行中でもアプリはシャットダウンされてしまう、という挙動をするのでしょうか?
下記の公式ドキュメントを見たのですが、英語に自信が無く書かれていることの意味がよく分かりませんでした。
https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/concurrent/ExecutorConfigurationSupport.html
もしご存知の方がいらっしゃいましたら、ご教示頂けますでしょうか?
環境
Java:1.8
Spring Boot:2.0.1.RELEASE
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。