@Async 注解无效的问题

@Async 注解作用

   在Spring中,基于@Async标注的方法,称之为异步方法;这些方法将在执行的时候,将会在独立的线程中被执行,调用者无需等待它的完成,即可继续其他的操作。即可理解为,标注了@Async注解的方法,会被主线程交给子线程去完成。

@Async注解用法

    /**
     * 保存发送短信日志
     * @param phone 手机号
     * @param object 短信参数
     * @return
     */
    @Async
    public void insertNotice(String phone, JSONObject object){
        // 业务逻辑,通常是比较低效且耗时的业务逻辑
        
    }

加了该注解,主程序调用insertNotice函数时,就不会等待该函数执行完成,类似启动子线程来执行。

new Thread(()->{
    // 业务逻辑,通常是比较低效且耗时的业务逻辑
    
}).start();

区别在于,通过@Async方法虽然也是子线程执行业务逻辑,但是避免程序创建,维护及销毁线程所带来的内存占用,该注解调用的是Spring维护的一个大的线程池中的子线程。

@Async 注解无效

实际使用中,通过DEBUG发现加了该注解并没有出现异步执行的情况,是因为缺少@EnableAsync注解。

@Service
@EnableAsync
public class MySelfServiceImpl {

    /**
     * 保存发送短信日志
     * @param phone 手机号
     * @param object 短信参数
     * @return
     */
    @Async
    public void insertNotice(String phone, JSONObject object){
        // 业务逻辑,通常是比较低效且耗时的业务逻辑
        
    }

}

一般的,如果在项目中经常使用该注解,一般会把它加到Application 类中,这样即可在全局使用该注解。

需要注意,使用该注解时,需要做一些配置,详细的可以百度。

@SpringBootApplication
@EnableAsync
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

猜你喜欢

转载自blog.csdn.net/qq_41057885/article/details/107107160
今日推荐