@Transactional 注解使用以及注意事项

@Transactional 注解使用以及注意事项

事务管理在系统开发中是不可缺少的一部分,Spring提供了很好的事务管理机制,主要分为编程式事务和声明式事务两种。

编程式事务: 是指在代码中手动的管理事务的提交、回滚等操作,代码侵入比较强。

声明式事务: 基于AOP面向切面的,它将具体业务与事务处理部分解耦,代码侵入性很低,所以在实际开发中声明式事务比较多。声明式事务有两种实现方式,分别式基于TX和AOP的xml配置文件方式,第二种就是基于 @Transactional注解。

可以用在哪些地方?

@Transactional可以用在接口、类、类方法

  • 作用于类:当把@Transactional注解放在类上时,表示所有该类的 public 方法都配置相同的事务属性信息。
  • 作用于方法:当类配置了@Transactional,方法也配置了@Transactional,方法的事务会覆盖类的事务配置信息。
  • 作用于接口:不推荐这种使用方法,因为一旦标注在 Interface 上并配置了 Spring AOP 使用 CGLib 动态代理,将会导致 @Transactional 注解失效。

@Transactional 注解参数说明

参数 功能
readOnly 该属性用于设置当前事务是否为只读事务,设置为true表示只读,false表示可读写,默认为false。例如:@Transactional(readOnly=true)
rollbackFor 该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常时,则进行事务回滚。例如:指定单一异常类:@Transactional(rollbackFor=RuntimeException.class),也可以指定多个异常类,默认是:RuntimeException和Error
rollbackForClassName 该属性用于设置需要进行回滚的异常类名称数组,当方法抛出指定异常名称的异常时,则进行事务回滚。例如:指定单一异常类名称@Transactional(rollbackForClassName=“RuntimeException”)指定多个:@Transactional(rollbackForClassName={“RuntimeException”,“Exception”})
noRollbackFor 该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚。例如:指定单一异常类 @Transactional(noRollbackFor=RuntimeException.class) 指定多个:@Transactional(noRollbackFor={RuntimeException.class, Exception.class})
noRollbackForClassName 该属性用于设置不需要进行回滚的异常类名称数组。
propagation 该属性用于设置事务的传播行为,例如:@Transactional(propagation=Propagation.NOT_SUPPORTED)
timeout 该属性用于设置事务的超时秒数,默认值为-1表示永不超时
isolation 该属性用于设置底层数据库的事务隔离级别,事务隔离界别用于处理多事务并发情况,通常使用数据库默认的隔离级别即可。


注意事项以及失效情况

  • @Transactional 应用在非 public 修饰的方法上
  • @Transactional 注解属性 propagation 设置错误,配置以下三种 propagation,事务将不会发生回滚。
    • PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
    • PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。
    • PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
  • @Transactional 注解属性 rollbackFor 设置错误
  • 同一个类中方法调用,导致@Transactional失效
  • 异常被catch吞掉导致失效
  • 数据库引擎不支持事务


原文始发于微信公众号(干货食堂):@Transactional 注解使用以及注意事项

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/258462.html

(0)
葫芦侠五楼的头像葫芦侠五楼

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!