Spring Boot @Async 注解实现线程池异步任务 | 完整案例
下面是一个完整的使用@Async注解的线程池案例:
- 首先,在 Spring Boot 的启动类上添加@EnableAsync注解来启用异步处理功能。
@SpringBootApplication
@EnableAsync
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
- 创建一个异步任务类,使用@Async注解来标记该方法为异步方法。在异步任务类中,我们可以使用ThreadPoolTaskExecutor来创建一个线程池。
@Component
public class AsyncTask {
private static final Logger logger = LoggerFactory.getLogger(AsyncTask.class);
private final ThreadPoolTaskExecutor taskExecutor;
public AsyncTask(ThreadPoolTaskExecutor taskExecutor) {
this.taskExecutor = taskExecutor;
}
@Async
public void doAsyncTask() {
logger.info('Start async task');
// 模拟耗时操作
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
logger.info('Async task completed');
}
}
- 在需要异步执行的地方调用异步任务。
@RestController
public class MyController {
private final AsyncTask asyncTask;
public MyController(AsyncTask asyncTask) {
this.asyncTask = asyncTask;
}
@GetMapping('/async-task')
public String asyncTask() {
asyncTask.doAsyncTask();
return 'Async task started';
}
}
在上面的例子中,当访问/async-task接口时,会启动一个异步任务doAsyncTask。该任务会在线程池中异步执行,而不会阻塞主线程。
注意,需要在pom.xml文件中添加相关依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-task</artifactId>
</dependency>
以上就是一个完整的使用@Async注解的线程池案例。通过使用@Async注解,我们可以方便地实现异步执行任务,提高系统的并发能力。
原文地址: http://www.cveoy.top/t/topic/qwRB 著作权归作者所有。请勿转载和采集!