Spring @Async

Posted by Adam on August 24, 2022
```java @SpringBootApplication @EnableAsync public class YourApplication { // ... } ``` ```java @Service public class YourService { @Async public CompletableFuture<String> asyncMethod() { // 需要異步執行的邏輯 // ... return CompletableFuture.completedFuture("Async method completed"); } } ``` 在上述示例中,asyncMethod() 方法被標記為異步方法。當該方法被調用時,它將在一個單獨的執行緒中非同步地運行,並返回一個 CompletableFuture 對象,表示異步操作的結果。 使用 @Async 注解時,需要注意以下幾點: * 異步方法必須定義在 Spring 托管的 bean 中(如服務類或組件類),以便 Spring 可以進行代理。 * 異步方法不能被同一類中的其他方法調用,否則異步功能將無效。這是因為 Spring 在執行異步方法時,實際上是通過代理將方法調用委派給異步執行器。 * 異步方法的返回值應該是 Future 或 CompletableFuture 類型,以便異步操作的結果能夠被監聽或處理。 請注意,為了使用 @Async 注解,你需要在 Spring Boot 中配置異步執行器(TaskExecutor)。默認情況下,Spring Boot 會自動配置一個基於線程池的異步執行器,你可以根據需要進行自定義配置。 ```java // 在調用異步方法時,可以得到一個 CompletableFuture 對象 CompletableFuture<String> future = yourService.asyncMethod(); // 可以在需要的時候添加回調函數處理結果 future.thenAccept(result -> { // 處理結果 }); ```