Duy*_*ỳnh 1 java spring loops spring-transactions
使用@Transactional 时,我在回滚事务方面遇到一些问题。我有以下代码:
@Transactional
public class A{
@Resource
Object obj;
public void insertMultiTable(){
for(Item item:items){
try{
obj.insertTableA();
obj.insertTableB();
} catch(Exception e){
// do somethings...
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我将执行 insertTableA 和 insertTableB,当两者都完成时我的过程就成功了。我有第一次和第二次就成功了。但在第三次,insertTableB将抛出异常,我只想回滚这个循环,第一次和第二次已插入数据库。我怎样才能做到呢?请帮忙...
将您的逻辑移至另一个服务并将其标记为@Transactional(propagation = Propagation.REQUIRES_NEW)
它将使得每个循环事务都是独立的。(IE:第三个循环抛出异常只会回滚第三个循环,保留第一个和第二个循环结果已提交)
public class SubA {
@Resource
Object obj;
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void insert(Item i) {
try{
obj.insertTableA();
obj.insertTableB();
} catch(Exception e){
// do somethings...
}
}
}
Run Code Online (Sandbox Code Playgroud)
A现在在您的班级中调用此服务
@Transactional
public class A{
@Resource
SubA subA;
public void insertMultiTable(){
for(Item item:items){
subA.insert(item);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4524 次 |
| 最近记录: |