Spring中的事物问题

原创
2017/03/18 13:55
阅读数 81
@Transactional(rollbackFor=Exception.class)
	public DataResult<Map<String, String>> createAccount(String param...) {
		DataResult<Map<String, String>> result = new DataResult<Map<String, String>>();
		try {
//1.向这个x表中插入数据
xxxxxx

//2.调用A服务的方法,向y表中插入数据
xxxxxx

//3.调用B服务的保存方法,向z表中插入数据
xxxxx
			
		} catch (Exception e) {
			LOGGER.error("*****register have error:" + e);
			result.setCode(ERROR);
			result.setMessage(e.getMessage());
			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
		}
		return result;
	}

我的疑问是如果1成功了,2抛异常,但是2的服务中的方法已经把异常捕捉了,那么如果在2的方法设置回滚,对于1来说,并没有回滚吧?所以这样做不合适吧?

所以我在判断2,3有异常的情况下会加一个TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 

 

spring的配置文件中,如果数据源的defaultAutoCommit设置为True了,那么方法中如果自己捕获了异常,事务是不会回滚的,如果没有自己捕获异常则事务会回滚

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部