这篇文章将为大家详细讲解有关怎么在线程池中使用spring aop增强事务,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
在项目里使用了线程池运行同一个类的实例方法,代码大致如下,运行时发现job方法的事务不生效
@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增强事务就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
线程池阻塞队列为什么都用LinkedBlockingQueue
线程池阻塞队列为什么都用LinkedBlockingQueue今天...
Java如何固定大小的线程池
Java如何固定大小的线程池1.固定大小的线程池简介线程池就是在程序启动的时候先建立几个可以使用的线程放在那里,然后等着具体的任...
线程池之newFixedThreadPool定长线程池的实例
线程池之newCachedThreadPool可缓存线程池的实例
Python 并发编程之线程池/进程池
引言Python标准库为我们提供了threading和multiprocessing模块编写相应的多线程/多进程代码,但是当项目...
用户名
密码
记住登录状态 忘记密码?
邮箱
确认密码
我已阅读并同意 用户协议