前提
同一クラス内で@Asyncつけていないメソッド、@Asyncをつけたメソッドがあり、
@Asyncつけていないメソッドから@Asyncをつけたメソッドを呼びたい。
実現したいこと
一部のメソッドだけ@Async
アノテーションを付与して非同期処理を実現したい。
発生している問題・エラーメッセージ
同一クラス内で@Asyncつけていないメソッドから@Asyncをつけたメソッドを呼ぶと非同期処理されない。
クラスを分ければ非同期処理される。
該当のソースコード
java
1@Service 2public class TestService { 3 4 public String test() throws Exception { 5 // すぐ終わる軽い処理 6 async(); 7 return "OK"; 8 } 9 10 @Async 11 public void async() throws Exception { 12 // 重たい処理 13 System.out.println("start"); 14 Thread.sleep(3000); 15 System.out.println("finish"); 16 } 17 18}
java
1@Configuration 2@EnableAsync 3public class WebConfig implements WebMvcConfigurer { 4 5 @Bean 6 public Executor executor() { 7 ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); 8 executor.setCorePoolSize(50); 9 executor.initialize(); 10 return executor; 11 } 12 13}
試したこと
上述のコードで、test()
メソッドを呼ぶと非同期にならずasync()
の終了を待たされます。
async()
を直接呼べば、async()
の終了を待たずに処理が終わります。
async()
部分を別クラスに切り出せばやりたいことは実現できるのですが、それ以外に方法はないのでしょうか?
補足情報(FW/ツールのバージョンなど)
Java 17
SpringBoot 2.6.1

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/13 08:34