使用注解@Async实现异步执行未生效的解决办法
1、第一种:未在启动类上标注开启异步执行的注解
启动类
@SpringBootApplication
@EnableScheduling
@EnableAsync
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600*4)
@MapperScan("com.*")
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
然后在要执行的方法上添加@Async
2、第二种失效情况:在同一个类Class中的两个方法 A ,B , B方法标注@Async,A方法在调用B方法是异步执行不生效
@Async生效是要由Spring容器管理的类调用才会生效,Spring在扫描到方法上包含@Async会生成一个动态子类来调用
同类方法间的调用不会生成动态子类,可以使用((Class)Appcontext.currentProxy()).B()来调用以确保异步正常执行