数据批量插入报异常但不触发全部回滚,甚至没触发事务
问题:批量插入数据的时候,中间数据插入一条错误数据,前面插入成功的还是插入了,一点事务的性质都没触发。查看日志一切正常,甚至触发了rollback
情况:多数据源,批量插入,异常不回滚全部数据
//问题代码
// @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
//应该value
@Transactional(propagation = Propagation.REQUIRED,value = "db1",rollbackFor = Exception.class)
public int addDimensionAttributeValue(List<ValueVo> ValueVos) throws Exception {
int nums = 0;
if (ValueVos==null||ValueVos.isEmpty()){
return nums;
}
try {
for (ValueVo value: ValueVos) {
nums += xxxDAO.addValue(value);
}
if (nums != ValueVos.size()){
throw new Exception("插入Value失败,回滚");
}
return nums;
} catch (Exception e) {
throw new Exception("插入Value失败,回滚");
}
}
解决方案:
多数据源情况下,会设置不同的事务管理器。
不同的数据源会有不同的事务管理器标识名。
所以注解不加value的情况下,无法区分哪个数据库需要进行回滚操作
@Transactional注解里面有这个value值,在多数据源的情况下需要使用value值进行区分各种数据源。
使用value后就可以正常进行回滚了