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

这篇文章将为大家详细讲解有关怎么在线程池中使用spring aop增强事务,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

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

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

@Transactional
publicvoiddoJob(){
EXECOTOR.execute(()->job());
}

@Transactional
publicvoidjob(){
//dboperation
}

原因分析:

debug进入job方法时,发现运行job方法的实例是个普通实例而不是个代理对象,因此无法实现aop增强

解决办法:

在doJob中调用AopContext.currentProxy()获取当前的代理对象,在代理对象上调用job方法

@Transactional
publicvoiddoJob(){
AAAServiceproxy=(AAAService)AopContext.currentProxy();
EXECOTOR.execute(()->proxy.job());
}

@Transactional
publicvoidjob(){
//dboperation
}

关于怎么在线程池中使用spring aop增强事务就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

发布于 2021-03-21 22:40:33
收藏
分享
海报
0 条评论
163
上一篇:如何在java中使用elasticsearch进行分组 下一篇:tf.concat中axis的含义是什么
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码