Springboot+@Async异步+多线程

博主在写项目是需要添加异步操作来提高效率,在网上有很多关于异步操作的例子 有的是集成消息队列mq(kafka等分布式消息队列 )有的是集成redis的消息队列等操作,关于消息队列的好处可以自行百度一下,在下认为集成消息队列是需要安装对应的程序对于小型项目没有必要,有时项目可能就是需要一个异步方法当然各有各自的好处下面简单说一下:

  缺点:当时用@Async进行异步操作时固然简单但是当整个项目挂掉的时候消息可能不会及时消费

  mq优点:集成消息队列生产者和消费者可能两个单独的应用 当生产者挂掉的时候消费者可以进行正常消费

好了废话不说了,赶紧上代码

1:集成@Async进行一步操作
   在启动类上加上@EnableAsync注解开启异步操作

@SpringBootApplication
@EnableAsync
public class Neo4jV2Application {
public static void main(String[] args) {
    SpringApplication.run(Neo4jV2Application.class, args);
}
}
在方法上使用@Async注解

@Async
public void getWbswryxxMessage(ConsumerRecord record) {

}
好了异步操作完成了是不是很简单,可是可是。。。。。。。。。。。。。。。。。

这里一定要注意千万注意!!!!!!俺就被坑了一次 调用被@Async标记的方法的调用者不能和被调用的方法在同一类中不然不会起作用!!!!!!!

   2:集成多线程操作

   这里使用的是线程池

@Bean(name = "taskExecutorWbswryxx")
public Executor taskExecutorWbswryxx() {
   ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
   executor.setCorePoolSize(10);
   executor.setMaxPoolSize(10);
   executor.setQueueCapacity(200);

   executor.setKeepAliveSeconds(60);
   executor.setThreadNamePrefix("taskExecutorWbswryxx-");
   executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
   executor.setWaitForTasksToCompleteOnShutdown(true);
   executor.setAwaitTerminationSeconds(60);
    return executor;
}
@Bean要起个名字,然后怎么使用呢?很简单只需要在@Async注解添加一个属性

@Async(value = "taskExecutorWbswryxx")
public void getWbswryxxMessage(ConsumerRecord record){
}
这里千万也要注意使用@Async时要求是不能有返回值的不然会报错的 因为异步要求是不关心结果的


原文:https://blog.csdn.net/zhanaolu4821/article/details/80941825 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值