Spring Boot はさまざまな非同期開発メソッドを提供します。一般的に使用されるメソッドの一部を以下に示します。
- @Async アノテーションを使用する
Spring Boot では、 @Async アノテーションを使用してメソッドを非同期として宣言できます。非同期サポートを有効にするには、@EnableAsync アノテーションをスタートアップ クラスまたは構成クラスに追加する必要があります。
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@EnableAsync
@Service
public class MyService {
@Async
public void doSomething() {
// 这里是异步任务代码...
}
}
- TaskExecutorの使用
@Async アノテーションを使用するだけでなく、TaskExecutor を使用して非同期タスクを手動で実行することもできます。構成クラスで TaskExecutor Bean を作成し、非同期タスクを実行する必要がある場所でそれを使用できます。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
@Configuration
public class TaskExecutorConfig {
@Bean(name = "taskExecutor")
public SimpleAsyncTaskExecutor taskExecutor() {
return new SimpleAsyncTaskExecutor();
}
}
- CompletableFuture の使用
Spring Boot は、非同期タスクを実行して結果を取得するために使用できる CompletableFuture クラスも提供します。CompletableFuture は Java 8 で導入され、Spring Boot もそれをサポートします。
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.springframework.stereotype.Service;
@Service
public class MyService {
public CompletableFuture<String> doSomethingAsync() throws InterruptedException, ExecutionException, TimeoutException {
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 这里是异步任务代码...
return "Hello World!";
});
return future;
}
}