A.java
try{
for(i=1;i<=5;i++){
List<Integer> intList = new ArrayList();
bService.executeMethod(i,intList);
}
}catch(Exception e){
logger.error("exception occoured {}",e);
}
B.java
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void executeMethod(int i, List<Integer> intList){
try{
.......dostuff;
}catch(Exception e){
strList.add(i)
}
}
如果出现问题,执行任何迭代的executeMethod(),让i = 2(如果发生了一些hibernate异常,它没有被catch块捕获),代码应该继续执行其余的迭代值i = 3到i = 5。
什么样的exeption将会被catch块捕获(如使用Excetion类),但它没有发生。我不知道为什么会这样,有人可以帮我解决这个问题。
正在抛出OptimisticLockException并且不执行其余的迭代它将被终止
答案 0 :(得分:1)
您确定没有遇到交易异常吗?如果doStuff
中发生了某些事情,它可能会破坏交易,将其标记为无效。离开executeMethod
后,Spring会尝试提交事务,然后失败,抛出另一个异常(在代理中)。
如果是在调试级别,您应该始终记录异常。此外,如果要捕获事务性异常,则必须在调用者中执行此操作。
通过代理抛出的异常将正确回滚事务。由于你捕获并忽略它,错误被“隐藏”到Spring。