使用注解@Async实现异步执行未生效的解决办法

Posted on 2024-02-22 14:44  焚天火  阅读(898)  评论(0编辑  收藏  举报

使用注解@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()来调用以确保异步正常执行