线程池中使用spring aop事务增强

网友投稿 338 2022-12-15


线程池中使用spring aop事务增强

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

问题描述:

在项目里使用了线程池运行同一个类的实例方法,代码大致如下,运行时发现job方法的事务不生效

@Transactional

public void doJob() {

EXECOTOR.execute(() ->job());

http://}

@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

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring Boot整合EhCache的步骤详解
下一篇:Java自定义实现equals()方法过程解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~