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();”时又会开启一个新的事务环境; 当上一个事务环境发生异常时,不会造成新的事务进行回滚;所以无论如何插入日志都会成功

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容