事务的传播属性和Spring @Transactional的用法

事务传播行为(Propagation Behavior): 当一个事务方法调用另一个事务方法时,这个事务应该如何进行。

Spring定义了7种传播行为:

PROPAGATION_REQUIRED: 需要事务。如果有事务则加入当前事务,如果没有事务则创建一个事务。

PROPAGATION_REQUIRED_NEW: 需要新事物。不管当前有没有事务都会新创建一个事务。

PROPAGATION_SUPPORTS: 支持事务。如果当前有事务,则加入当前事务,如果没有事务则按照非事务方式运行。

PROPAGATION_NOT_SUPPORTED: 不支持事务。如果当前有事务,则挂起当前事务。

PROPAGATION_MANDATORY: 将事务委托给调用方,因此需要调用方以事务方式运行。如果当前没有事务则会报错。

PROPAGATION_NESTED: 不管当前有没有事务都会启动一个新事务,如果当前有事务则与当前事务共用一个commit操作。

PROPAGATION_NEVER: 不能运行在事务中,如果当前存在事务则抛出异常。

 

Spring @Transational 注解的使用方法:

@Transactional 参数说明
参数类型说明
valueString可选,用来指定所使用的的事务管理器的名字
propagationENUM:Propagation可选,事务传播属性设置
isolationENUM:Isolation可选,指定事务隔离级别,仅限于独立新创建事务的场景(REQUIERD, REQUIRED_NEW)
timeoutint 

可选,指定超时时间,精确到秒。仅限于独立创建新事物的场景。

readOnlyboolean可选,事务执行时是否对数据库进行只读操作。
rollbackForList<Class>可选,抛出什么Class时回滚。
rollbackForClassNameList<String>可选,抛出什么名字的异常时回滚。
noRollbackFor 参见 rollbackFor
noRollbackForClassName 

参见 rollbackForClassName

 

 

 

 


 

 

 

 

 

 

 

注意事项:

  1. @Transactional只在public方法上生效,如果需要在其他访问控制修饰符使用事务还需要其他配置,参见官方文档。
  2. @Transactional只适合于外部函数调用时才能生效,对象中的内部方法互相调用时不会起作用。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值