在springboot中关于@Transactional事务注解不能回滚的原因

	@Override
	@Transactional(readOnly = false,rollbackFor=Exception.class,propagation=Propagation.REQUIRED)
	public ResultBean<String> test(GoodsInfo goodsInfo) {
		try {
			GoodsInfo goodsInfo1 = new GoodsInfo();
			goodsInfo1.setId("4");
			goodsInfo1.setGoodsName("测试4");
			goodsInfo1.setGoodsTitle("测试4的标题");
			GoodsInfo goodsInfo2 = new GoodsInfo();
			goodsInfo2.setId("5");
			goodsInfo2.setGoodsName("测试5");
			goodsInfo2.setGoodsTitle("测试5的标题");
			GoodsInfo goodsInfo3 = new GoodsInfo();
			goodsInfo3.setId("2");
			goodsInfo3.setGoodsName("测试6");
			goodsInfo3.setGoodsTitle("测试6的标题");
			goodsInfoMapper.testRollback(goodsInfo1);
			System.out.println("执行完了第一次");
			goodsInfoMapper.testRollback(goodsInfo2);
			System.out.println("执行完了第二次");
			goodsInfoMapper.testRollback(goodsInfo3);
			System.out.println("执行完了第三次");
			ResultBean<String> resultBean = new ResultBean<String>(CommonErrorEnum.SUCCESS);
			resultBean.setResult("OK");
			return resultBean;

		}catch (Exception e){
			e.printStackTrace();
		}
		return new ResultBean<>(CommonErrorEnum.MYSQL_ERROR);
	}

 

 

这是我第一次写的情况,此时不发生回写,是因为他们中间发生了异常,由于我写了try catch,所以,所有发生的异常都是由我自己去操作的,外面是看不到异常的,,,,而事务的回滚是发生由你自己定义的异常才会发生回滚,由于异常没有跑出去,所以没有回滚

 

修改之后(把try catch去掉即可):

        @Override
	@Transactional(readOnly =        false,rollbackFor=Exception.class,propagation=Propagation.REQUIRED)
	public ResultBean<String> test(GoodsInfo goodsInfo) {
	        GoodsInfo goodsInfo1 = new GoodsInfo();
		goodsInfo1.setId("4");
		goodsInfo1.setGoodsName("测试4");
		goodsInfo1.setGoodsTitle("测试4的标题");
		GoodsInfo goodsInfo2 = new GoodsInfo();
		goodsInfo2.setId("5");
		goodsInfo2.setGoodsName("测试5");
		goodsInfo2.setGoodsTitle("测试5的标题");
		GoodsInfo goodsInfo3 = new GoodsInfo();
		goodsInfo3.setId("2");
		goodsInfo3.setGoodsName("测试6");
		goodsInfo3.setGoodsTitle("测试6的标题");
		goodsInfoMapper.testRollback(goodsInfo1);
		System.out.println("执行完了第一次");
		goodsInfoMapper.testRollback(goodsInfo2);
		System.out.println("执行完了第二次");
		goodsInfoMapper.testRollback(goodsInfo3);
		System.out.println("执行完了第三次");
		ResultBean<String> resultBean = new ResultBean<String>(CommonErrorEnum.SUCCESS);
		resultBean.setResult("OK");
		return resultBean;

此时,就可回滚,,,,,

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值