Jac*_*cky 37 java spring multithreading transactional propagation
我有一个方法如下:
ClassA.java
@Transactional
public void methodA(){
ExecutorService executorService = Executors.newFixedThreadPool(4);
executorService.execute(new Runnable() {
public void run() {
classB.methodB();
}
});
}
ClassB.java
@Transactional
public void methodB(){
updateDB();
}
Run Code Online (Sandbox Code Playgroud)
方法B可以很好地工作吗?根据我的理解,methodB将附加methodA的事务,如果methodA在methodB之前退出怎么办?我想只有methodA才能被事务提交.但是因为之前提交的事务,methodB不会提交.
我可以对methodB使用@Transactional(propagation = Propagation.REQUIRES_NEW).这可以让方法B有一个新的事务.但是根据spring doc,方法A的转换将在调用methodB时暂停.我觉得这里很困惑.
任何人都可以帮我解决这个问题吗?提前致谢.
jmr*_*ruc 29
不,methodB()不会在同一笔交易中执行methodA().Spring @Transactional只能在单个线程上运行 - 当线程首次使用@Transactional(或类中的方法@Transactional)进入某个方法时,它会创建一个会话,然后在它离开该方法时提交它.
在您的示例中,事务将在您在线程池中计划作业后结束.methodB()将拥有它自己的交易.
| 归档时间: |
|
| 查看次数: |
17979 次 |
| 最近记录: |