【发布时间】:2021-05-12 10:11:45
【问题描述】:
我是软件新手。我正在努力了解 Spring Boot 中的异步编程。如上所示,我将线程池大小设置为 2。当我一次又一次地请求相同的 url 三次时。我的两个请求是异步工作的。第三个正在等待。还行吧。但是当我不使用异步功能(既不使用@async 注释也不使用线程池)时,它仍然像以前一样异步执行事务。所以我很困惑。 Spring Boot 休息控制器默认行为异步?为什么我们在 Spring Boot 中使用 @async?还是我理解错了?
@Service
public class TenantService {
@Autowired
private TenantRepository tenantRepository;
@Async("threadPoolTaskExecutor")
public Future<List<Tenant>> getAllTenants() {
System.out.println("Execute method asynchronously - "
+ Thread.currentThread().getName());
try {
List<Tenant> allTenants = tenantRepository.findAll();
Thread.sleep(5000);
return new AsyncResult<>(allTenants);
} catch (InterruptedException e) {
//
}
return null;
}
}
@Configuration
@EnableAsync
public class AsyncConfig {
@Bean(name = "threadPoolTaskExecutor")
public Executor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(2);
executor.setMaxPoolSize(2);
executor.setQueueCapacity(100);
executor.setThreadNamePrefix("AsynchThread-");
executor.initialize();
return executor;
}
@Bean(name = "threadPoolTaskExecutor2")
public Executor threadPoolTaskExecutor2() {
return new ThreadPoolTaskExecutor();
}
}
【问题讨论】:
标签: java spring spring-boot