设置事务管理

在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-boot】spring-boot 事物管理——之注解@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类似