现在的位置: 首页 > 编程语言 > 正文

线程池中使用springaop事务增强

2020年02月18日 编程语言 ⁄ 共 618字 ⁄ 字号 评论关闭

这篇文章主要介绍了线程池中使用spring aop事务增强,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

问题描述:

在项目里使用了线程池运行同一个类的实例方法,代码大致如下,运行时发现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 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

以上就上有关线程池中使用springaop事务增强的相关介绍,要了解更多spring, aop, 事务, 线程池, 增强内容请登录学步园。

抱歉!评论已关闭.