【spring-boot】spring-boot 事物管理——之注解@Transactional

设置事务管理

在Spring Boot中推荐使用@Transactional注解来申明事务。

首先需要导入依赖:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-jdbc</artifactId>

</dependency>

当引入jdbc依赖之后,Spring Boot会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager,所以我们不需要任何额外配置就可以用@Transactional注解进行事务的使用。

在Service中添加@Transactional注解

后补:

事务的嵌套概念
 * 所谓事务的嵌套就是两个事务方法之间相互调用。spring事务开启 或是基于接口或是基于类的代理被创建
 * 注意一定是代理,不能手动new一个对象。并且此类有无接口都行,一定要被代理 spring中的bean只要纳入IOC管理被代理的
 * 所以同一个类中搞得一个方法调用另一个方法有事务的方法,事务是不会起作用的
 * spring 默认情况下不会对运行期列外runtimeExceptipon 既uncheck异常 进行事务回滚、
 * 如果遇到cheched异常就不会回滚。
 * 如果改变默认规则
 *   让checked例外也回回滚。在整个方法上加上@Trancational(rollbackFor=Exception.class)
 *   2.让unchecked例外不回滚,#Trancational(notRollbackFor=RunTimeExcepiton.class)

spring事务传播属性
 *   在spring的TrancationDefination接口中一定定义了6中事务传播属性、
 *   Propagation_required 支持当前事务。如果当前没有事务。就创建一个新的事务。这是最常见的选择
 *   Propagation_Supports 支持当前事务  如果没有事务,就以非事务方式执行
 *   Propagation_Requres_new 新建事务。如果当前存在事务,把当前事务挂起。
 *   Propagation_Not_Supports 一以非事务方式执行操作。如果当前存在事务。就把当前事务挂起。
 *   Propagation_Never 以非事务方式执行。如果当前存在事务。则抛出异常
 *   Propagation_Nested 如果当前存在事务。则在嵌套事务内执行,如果当前没有事务。则进行与PRO Prgation_Requered类似

原文地址:https://www.cnblogs.com/qxlxi/p/12860984.html