前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >java spring事务父方法、子方法各自回滚问题处理

java spring事务父方法、子方法各自回滚问题处理

作者头像
六月的雨在Tencent
发布2024-03-28 20:34:09
发布2024-03-28 20:34:09
39900
代码可运行
举报
文章被收录于专栏:CSDNCSDN
运行总次数:0
代码可运行
java spring事务父方法、子方法各自回滚问题处理

问题描述

service实现类中A方法(父方法)调用B方法(子方法),两个方法均开启事务,且事务各自独立,A方法和B方法均可自行回滚且相互之间各不干扰。

A方法

注解@Transactional(rollbackFor = Exception.class) 开启A方法的事务

其中: goodsService.importData3(); 调用B方法或者采用SpringUtils.getAopProxy(this).importData3(); 调用B方法均可以,这里try catch B方法异常是为了防止B方法造成的异常影响到A方法的插入 代码如下:

代码语言:javascript
代码运行次数:0
复制
	@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方法不属于同一个事务

代码语言:javascript
代码运行次数:0
复制
	@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);
	}

注:个人测试有效,大家可以作为参考

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • java spring事务父方法、子方法各自回滚问题处理
  • 问题描述
    • A方法
    • B方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档