SpringBoot用@Async实现异步调用
@Async 的使用
1、在启动类中加上注解@EnableAsync启用异步
2、在使用异步的方法上加上注解@Async,自己写一个线程池,指定线程池。不建议使用默认的线程池。
在线程池应用中,参考阿里巴巴java开发规范:线程池不允许使用Executors去创建,不允许使用系统默认的线程池,
推荐通过ThreadPoolExecutor的方式,这样的处理方式让开发的工程师更加明确线程池的运行规则,规避资源耗尽的风险
我这个功能的业务逻辑是:配送派工完成后给顾客发送微信公众号消息,提醒顾客货物开始配送了
于是在派工完成业务逻辑完成后调用推送消息的方法,是无返回值的调用
方法上加注解
在启动类上写自己的线程池
测试是异步调用成了
3、注意事项
- 异步方法不能与异步方法在同一个类中
- 如果使用SpringBoot框架必须在启动类中增加@EnableAsync注解
- 在Async 方法上标注@Transactional是没用的。 在Async 方法调用的方法上标注@Transactional 有效。
- 类或者方法中使用@Async注解,类上标有该注解表示类中方法都是异步方法,方法上标有该注解表示方法是异步方法
- 注解的方法必须是public方法,不能是static
参考文章:
https://blog.csdn.net/houxian1103/article/details/110299410
https://blog.csdn.net/qq_44695727/article/details/120082934
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通