readonly:只读属性
timeout:设置事务超时时间,-1永不超时
rollbackfor:设置事务回滚异常
某些异常不参与回滚需要添加,比如下面如果不添加IOE异常,那么上面会执行成功,下面会失败,添加iOE异常之后,事务会进行回滚
@Transactional(rollbackFor = {IOException.class})
public void transfer(String out, String in, Double money) throws IOException {
accountDao.outMoney(out,money);
if(true){throw new IOException();}
//内存异常,
//运行异常 io异常不会进行提交回滚
accountDao.inMoney(in,money);
}
本文案例,将转账信息存为日志,引入一个新的概念
事务协调员
,事务协调员对事务管理员所携带事务处理的态度
存日志数据访问层
public interface LogDao {
@Insert("insert into logService (info,createData) values (#{info},now())")
public void log(String info);
}
propagation
在新的事务,重新创建新的事务,
public void transfer(String out, String in, Double money) throws IOException {
try {
accountDao.outMoney(out,money);
int i = 1/0;
accountDao.inMoney(in,money);
} finally {
logService.log(out, in, money);
}
}
public interface LogService {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void log(String out, String in, Double money);
}
网友评论