spring boot 中的异步@Async
在Spring Boot中,@Async
注解用于创建异步任务,以便在不阻塞主线程的情况下执行。
解决方案:
- 在Spring Boot主类或配置类中启用异步支持。
@EnableAsync
@SpringBootApplication
public class AsyncApplication {
public static void main(String[] args) {
SpringApplication.run(AsyncApplication.class, args);
}
}
- 创建异步任务的服务类。
@Service
public class AsyncService {
@Async
public void executeAsyncTask() {
System.out.println("执行异步任务: " + Thread.currentThread().getName());
}
}
- 在需要调用异步任务的地方注入
AsyncService
并调用异步方法。
@RestController
public class AsyncController {
@Autowired
private AsyncService asyncService;
@GetMapping("/async")
public String asyncMethod() {
asyncService.executeAsyncTask();
return "异步任务已启动";
}
}
注意:默认情况下,Spring 使用SimpleAsyncTaskExecutor
作为异步任务执行者,这不是真正的线程池。为了高效处理异步任务,你应该配置一个真正的线程池。
@Configuration
@EnableAsync
public class AsyncConfig implements AsyncConfigurer {
@Override
@Bean
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(25);
executor.initialize();
return executor;
}
}
在这个配置中,我们定义了一个线程池,其核心线程数为5,最大线程数为10,队列大小为25。当异步任务执行时,它们将在这个线程池中调度。
评论已关闭