如何在线程池中应用Spring AOP进行事务增强处理?
- 内容介绍
- 文章标签
- 相关推荐
本文共计321个文字,预计阅读时间需要2分钟。
这篇文章主要介绍了在线程池中使用Spring AOP增强事务的处理方法。通过示例代码展示了如何实现,内容较为简洁,适合对Spring AOP和事务有一定了解的学习者或工作者参考。需要的伙伴可以参考学习。问题描述:在项目中使用线程池+Spring AOP增强事务。
这篇文章主要介绍了线程池中使用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 }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。
本文共计321个文字,预计阅读时间需要2分钟。
这篇文章主要介绍了在线程池中使用Spring AOP增强事务的处理方法。通过示例代码展示了如何实现,内容较为简洁,适合对Spring AOP和事务有一定了解的学习者或工作者参考。需要的伙伴可以参考学习。问题描述:在项目中使用线程池+Spring AOP增强事务。
这篇文章主要介绍了线程池中使用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 }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

