AOP事务管理(下)

@Transactional注解可以设置参数。
在这里插入图片描述
readOnly:true只读事务,false读写事务,增删改要设为false,查询设为true。
timeout:设置超时时间单位秒,在多长时间之内事务没有提交成功就自动回滚,-1表示不设置超
时时间。
rollbackFor:当出现指定异常进行事务回滚。
noRollbackFor:当出现指定异常不进行事务回滚。
注意:Spring的事务只会对Error异常RuntimeException异常及其子类进行事务回顾,其他的异常类型是不会回滚的。

isolation设置事务的隔离级别:
DEFAULT :默认隔离级别, 会采用数据库的隔离级别
READ_UNCOMMITTED : 读未提交
READ_COMMITTED : 读已提交
REPEATABLE_READ : 重复读取
SERIALIZABLE: 串行化

propagation属性设置事务的传播。
比如:在前面的转案例的基础上添加新的需求,完成转账后记录日志。
LogDao接口:

public interface LogDao {
@Insert("insert into tbl_log (info,createDate) values(#{info},now())")
	void log(String info);
}

LogService接口与实现类:

public interface LogService {
	void log(String out, String in, Double money);
}
@Service
public class LogServiceImpl implements LogService {
	@Autowired
	private LogDao logDao;
	@Transactional
	public void log(String out,String in,Double money ) {
		logDao.log("转账操作由"+out+"到"+in+",金额:"+money);
	}
}

修改后的转账业务:

public interface AccountService {
	/**
	* 转账操作
	* @param out 传出方
	* @param in 转入方
	* @param money 金额
	*/
	//配置当前接口方法具有事务
	public void transfer(String out,String in ,Double money) ;
}

@Service
public class AccountServiceImpl implements AccountService {
	@Autowired
	private AccountDao accountDao;
	@Autowired
	private LogService logService;
	
	@Transactional
	public void transfer(String out,String in ,Double money) {
		try{
			accountDao.outMoney(out,money);
			accountDao.inMoney(in,money);
		}finally {
			logService.log(out,in,money);
		}
	}
}

看起来可能没什么问题,但是一旦转账业务之间出现异常,转账失败事务回滚后日志记录能保存下来吗?很明显因为日志与转账属于同一个事务,所以会一起回滚。这时候就需要propagation属性,将日志添加到一个新的业务之中。即修改事务传播行为(事务协调员对事务管理员所携带事务的处理态度)。

@Service
public class LogServiceImpl implements LogService {
	@Autowired
	private LogDao logDao;
	//propagation设置事务属性:传播行为设置为当前操作需要新事务
	@Transactional(propagation = Propagation.REQUIRES_NEW)
	public void log(String out,String in,Double money ) {
		logDao.log("转账操作由"+out+"到"+in+",金额:"+money);
	}
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值