1、开启事务管理
启动类加上@EnableTransactionManagement
在这里插入图片描述
2、方法上添加 @Transactional
在这里插入图片描述
事务传播行为一般是用required和support,如果是增/删/改的话一般是用require,查的话一般是用support.

示例代码

3、Propagation 属性
Required 需要 如果存在一个事务,则支持当前事务。如果没有事务则开启
Supports 支持 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行
Mandatory 必要的 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
required_new 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
Not_support 总是非事务地执行,并挂起任何存在的事务。
Never 绝不 总是非事务地执行,如果存在一个活动事务,则抛出异常
Nested 嵌套的 如果有就嵌套、没有就开启事务

4、@Transaction注解不生效问题
引用文章
1:遇到非检测异常时,事务不开启,也无法回滚。
原因:因为Spring的默认的事务规则是遇到运行异常(RuntimeException)和程序错误(Error)才会回滚。如果想针对非检测异常进行事务回滚,可以在@Transactional 注解里使用rollbackFor 属性明确指定异常。

2: 在业务层捕捉异常后,发现事务不生效。
原因:在业务层手工捕捉并处理了异常(try…catch)等于把异常“吃”掉了,Spring自然不知道这里有错,更不会主动去回滚数据。推荐做法是在业务层统一抛出异常,然后在控制层统一处理。

3 :注解到protected可见度的方法上,事务不生效
原因:@Transactional 注解应该只被应用到 public 可见度的方法上。 如果你在 protected、private 或者 package-visible 的方法上使用 @Transactional 注解,它也不会报错, 但是这个被注解的方法将不会展示已配置的事务设置。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐