问题参考:https://www.cnblogs.com/timeout/p/10477561.html
写法参考:http://blog.didispace.com/springbootasync/
配置参考:https://blog.csdn.net/qq_39385706/article/details/79365849
有几个限制:
1.两个方法都在同一个类里面,只是一个方法调用另一个异步方法,不生效。
解决方法:拆分两个方法,将异步方法单独放在一个类里面,然后再去调用就解决了。
2.有接口方法的实现类里的注解不生效,例子:
一个@Controller类:HistroyDefectsController
一个接口:IRecordDefectsService
一个接口的实现@Service类:RecordDefectsServiceImpl
一个其中的同步方法为:longtimerds()
HistroyDefectsController中的实例化为
@Autowired
private IRecordDefectsService recordDefectsService;
调用的时候为:
recordDefectsService.longtimerds();
那么这个异步没有效果。
解决方法:在实现类中调用一个没有接口的类才可以。
3.我的最终的配置方法:
@Configuration
@EnableAsync
public class SpringAsyncConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
//线程池
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(5);//核心线程数
taskExecutor.setMaxPoolSize(10);//最大线程数
taskExecutor.setQueueCapacity(25);//队列大小
taskExecutor.initialize();//初始化
return taskExecutor;
}
}