spring boot 之 @Async 异步方法使用

@Async

    标注@Async的方法将称之为异步方法

业务场景:

    当用户填写完注册申请资料时、系统需要通过填写的资料进行综合评判等级。那么我们将这个功能拆分成两块、一份处理保存用户资料录入的方法、另一个方法通过异步手段对数据进行分析入库、但是不能影响用户正常的录入功能,换句话说 即使综合评判等级的方法报错了,但是不能影响已经录入成功的数据。

实现:如果有这种业务场景时、我们可以通过@Async注解来提升性能

举例说明一下:

    当A方法调用 B、C方法时 若B方法标注了@Async注解 那么将会开启新的一个线程去执行B方法的内容。 然而C方法不会等待B方法执行完再执行。

    注意: 若B方法中有直接操作数据库的动作,那么请在B方法上再添加@Transactional(rollbackFor = Exception.class) 注解,这样能有效的保证数据有效性。 同时,若C方法执行完成后 B方法还未执行完那么将直接杀死线程。

踩坑记录之 @Async 失效

1)若发现@Async 注解没生效 请查看一下代码是否配置了线程池

  import java.util.concurrent.Executor;

 import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;

 import org.springframework.context.annotation.Configuration;

 import org.springframework.scheduling.annotation.AsyncConfigurer;

 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

@Configuration

public class SpringAsyncConfigurerimplements AsyncConfigurer {

@Override

  public ExecutorgetAsyncExecutor() {

ThreadPoolTaskExecutor executor =new ThreadPoolTaskExecutor();

    executor.setCorePoolSize(10);

    executor.setMaxPoolSize(20);

    executor.setQueueCapacity(20);

    executor.setThreadNamePrefix("MyExecutor-");

    executor.initialize();

    return executor;

  }

@Override

  public AsyncUncaughtExceptionHandlergetAsyncUncaughtExceptionHandler() {

return null;

  }

}

2)检查一下启动类上是否添加了@EnableAsync注解

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • IoC 容器 Bean 的作用域 自定义作用域实现 org.springframework.beans.facto...
    Hsinwong阅读 2,647评论 0 7
  • 流程 extends ApplicationEvent建立操作事件—>业务service注册事件—>Listene...
    覃始皇阅读 708评论 0 0
  • 一点知识 在JAVA开发领域,目前可以通过以下几种方式进行定时任务: Timer:jdk中自带的一个定时调度类,可...
    雅倩兰爸爸阅读 3,946评论 1 28
  • 对于java中的思考的方向,1必须要看前端的页面,对于前端的页面基本的逻辑,如果能理解最好,不理解也要知道几点。 ...
    神尤鲁道夫阅读 940评论 0 0
  • 一一《听大脑说话和给大脑编程》日课 作为一个经常犹豫不决的人,看到这篇文章,心下窃喜——原来想太多竟...
    牧迁阅读 296评论 0 0

友情链接更多精彩内容