7.21_29期Spring事务属性

2023-07-29  本文已影响0人  萧修

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);

}
上一篇 下一篇

猜你喜欢

热点阅读