【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类似