spring 09 事务属性

事务属性:
// 当前方法应用事务
@Transactional(
    readOnly=false,      // 读写的事务,当修改数据时候用;如果查询就设置为true
    isolation=Isolation.DEFAULT,  // 事务隔离级别
    timeout=-1,         // 事务执行的超时时间, -1 表示不超时
    noRollbackFor=ArithmeticException.class,   // 遇到指定的异常不回滚
    propagation=Propagation.REQUIRES_NEW      // 事务传播行为
)
事务传播行为:

REQUIRES_NEW:

如果上下文中已经存在事务A,则该事务A挂起,并启动一个新的事务B。 当事务B结束后,事务A被唤醒并继续执行

REQUIRED:

当前执行方法必须在事务环境下运行!如果调用当前方式时候已经有一个事务环境,当前执行方法会加入当前事务环境,就不开启新的事务;如果调用当前方法时候没有事务环境,就开启一个新的事务!

SUPPORTS:

支持事务环境! 如果当前方法没有事务,也可以运行!

Never:

当前方法不能再事务环境下运行!

案例:

插入部门信息,插入日志(日志)!

  1. t_log 日志表
  2. LogService.java 插入记录
REQUIRES_NEW
insertLog()

不管当前执行方法有没有事务环境,都开启新事务!

  1. DeptService.java
 REQUIRED
Void  save() {
        // 日志提示: 在插入部门….
        insertLog();     // 始终插入
        int  I  = 1/0;  
        dao.save();  调用dao的保存方法
}

讲解:
执行save方法时开启了一个新的事务环境,执行到“insertLog();”时又会开启一个新的事务环境; 当上一个事务环境发生异常时,不会造成新的事务进行回滚;所以无论如何插入日志都会成功

你可能感兴趣的:(spring 09 事务属性)