Spring Boot 事物的快速应用
来源:互联网 发布:地产网络推广媒体 编辑:程序博客网 时间:2024/06/08 12:33
博文参考学习
博文参考学习
博文参考学习
快速应用
首先在springBootApplication开启事物管理
@SpringBootApplication@xxxx@xxxxx@EnableTransactionManagement //开启事物管理public class App { public static void main(String args[]){ SpringApplication.run(App.class, args); }}
在Spring Boot中,当我们使用了
spring-boot-starter-jdbc 或者spring-boot-starter-data-jpa
依赖的时候,框架会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager。所以我们不需要任何额外 配置就可以用@Transactional注解进行事务的使用。
@Transactional使用在类上面是,对应类中的所有方法都会开启事物管理。
在方法上使用时,只会对当前方法开启事物管理
事务详解
以上试用于一些基本的,简单的业务。当我们业务复杂,使用的不同的数据源。需要指定不同的事务管理的时候(多数据源的配置详见:
《Spring Boot多数据源配置与使用》),只需要通过value属性配置事务管理器的名即可@Transactional(value="transactionalManagerPrimary")
除了指定不同的事务管理器之后,还能对事务进行隔离级别和传播行为的控制,下面分别详细解释:
隔离级别
隔离级别是指若干个并发的事务之间的隔离程度,与我们开发时候主要相关的场景包括:脏读取、重复读、幻读。
我们可以看 org.springframework.transaction.annotation.Isolation 枚举类中定义了五个表示隔离级别的值:
public enum Isolation { DEFAULT(-1), READ_UNCOMMITTED(1), READ_COMMITTED(2), REPEATABLE_READ(4), SERIALIZABLE(8);}
- DEFAULT :这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是: READ_COMMITTED 。
- READ_UNCOMMITTED :该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读和不可重复读,因此很少使用该隔离级别。
- READ_COMMITTED :该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。
- REPEATABLE_READ :该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。该级别可以防止脏读和不可重复读。
- SERIALIZABLE :所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。
指定方法:通过使用 isolation 属性设置,例如:@Transactional(isolation = Isolation.DEFAULT)
传播行为
所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。
我们可以看 org.springframework.transaction.annotation.Propagation 枚举类中定义了6个表示传播行为的枚举值:
public enum Propagation { REQUIRED(0), SUPPORTS(1), MANDATORY(2), REQUIRES_NEW(3), NOT_SUPPORTED(4), NEVER(5), NESTED(6);}
- REQUIRED :如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
- SUPPORTS :如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
- MANDATORY :如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
- REQUIRES_NEW :创建一个新的事务,如果当前存在事务,则把当前事务挂起。
- NOT_SUPPORTED :以非事务方式运行,如果当前存在事务,则把当前事务挂起。
- NEVER :以非事务方式运行,如果当前存在事务,则抛出异常。
- NESTED :如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于 REQUIRED 。
指定方法:通过使用 propagation 属性设置,例如:@Transactional(propagation = Propagation.REQUIRED)
- Spring Boot 事物的快速应用
- Spring boot 事物管理
- spring boot事物
- spring boot 事物管理
- Spring Boot ---- 快速开发web应用的神器
- 采用Gradle快速构建基于Spring boot的MVC应用
- 使用Spring Boot快速构建基于SQLite数据源的应用
- 使用Spring Boot快速构建基于SQLite数据源的应用
- 使用Spring Boot快速构建基于SQLite数据源的应用
- spring boot 开启声明事物
- Spring Boot (4) 事物管理
- spring boot @Transactional事物处理
- 使用Spring Boot快速构建应用
- 使用Spring Boot快速构建应用
- Spring Boot框架快速构建应用
- 使用Spring Boot快速构建应用
- 使用Spring Boot快速构建应用
- 使用Spring Boot快速构建应用
- JDK 9 发布仅数月,为何在生产环境中却频遭嫌弃?
- java基础—如何创建线程?如何保证线程安全?
- angularJs中service的三种方法以及区别(factory,service,provider三者的区别)
- Android源码修改(自动获取usb权限)基于Android5.1定制版系统
- python windows环境下 pip install itchat 失败的原因
- Spring Boot 事物的快速应用
- String判断相等
- 基础练习 Huffuman树
- Linux环境下WEB应用启动或关闭tomcat脚本编写(一)
- 希狄微HL7015快充芯片简介
- JS设置cookie、读取cookie、删除cookie
- 解决打开GitHub网站格式不正确的问题
- java基础-String/StringBuffer/StringBuilder
- 基于FPGA的LVDS模块在DAC系统中的应用