大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要讲解了“线程池运行时发现job方法的事务不生效怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“线程池运行时发现job方法的事务不生效怎么解决”吧!
创新互联建站-专业网站定制、快速模板网站建设、高性价比镇海网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式镇海网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖镇海地区。费用合理售后完善,十载实体公司更值得信赖。问题描述:
在项目里使用了线程池运行同一个类的实例方法,代码大致如下,运行时发现job方法的事务不生效
@Transactional public void doJob() { EXECOTOR.execute(() ->job()); } @Transactional public void job(){ //db operation }
原因分析:
debug进入job方法时,发现运行job方法的实例是个普通实例而不是个代理对象,因此无法实现aop增强
解决办法:
在doJob中调用AopContext.currentProxy()获取当前的代理对象,在代理对象上调用job方法
@Transactional public void doJob() { AAAService proxy = (AAAService) AopContext.currentProxy(); EXECOTOR.execute(() ->proxy.job()); } @Transactional public void job(){ //db operation }
感谢各位的阅读,以上就是“线程池运行时发现job方法的事务不生效怎么解决”的内容了,经过本文的学习后,相信大家对线程池运行时发现job方法的事务不生效怎么解决这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联网站建设公司,,小编将为大家推送更多相关知识点的文章,欢迎关注!