java spring事务父方法、子方法各自回滚问题处理
java spring事务父方法、子方法各自回滚问题处理欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流
·
问题描述
service实现类中A方法(父方法)调用B方法(子方法),两个方法均开启事务,且事务各自独立,A方法和B方法均可自行回滚且相互之间各不干扰。
A方法
注解@Transactional(rollbackFor = Exception.class) 开启A方法的事务
其中: goodsService.importData3(); 调用B方法或者采用SpringUtils.getAopProxy(this).importData3(); 调用B方法均可以,这里try catch B方法异常是为了防止B方法造成的异常影响到A方法的插入
代码如下:
@Override
@Transactional(rollbackFor = Exception.class)
public Map importData(MultipartFile file, String examId, String subjectId, String seasonId){
Map map = new HashMap(8);
//插入业务表信息
Goods goods = new Goods();
goods.setName("商品002");
insertGoods(goods);
map.put("num1",1);
map.put("num2",2);
map.put("num3",3);
System.out.println(1/0);
try {
goodsService.importData3();
SpringUtils.getAopProxy(this).importData3();
}catch (Exception e) {
e.printStackTrace();
}
return map;
}
B方法
注解@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)开启B方法的新事务,且A方法与B方法不属于同一个事务
@Override
@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)
public void importData3() {
Goods goods = new Goods();
goods.setName("商品003");
insertGoods(goods);
System.out.println(1/0);
}
注:个人测试有效,大家可以作为参考
更多推荐
已为社区贡献12条内容
所有评论(0)