Spring Boot 事物的快速应用

标签: spring-boot 事务
94人阅读 评论(0) 收藏 举报
分类:

博文参考学习
博文参考学习
博文参考学习

快速应用

首先在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)
查看评论

在VC中实现程序在启动时隐藏

    最近经常见论坛上有人问,程序在启动时如何隐藏。以下是我总结的一些方法,欢迎大家讨论,找出更好的方法。    对于这类问题,大家最容易想到的可能就是在PreCreateWindow中添加cs.s...
  • AttaBoy
  • AttaBoy
  • 2002-03-03 09:18:00
  • 1232

使用Spring Boot快速构建Spring框架应用

  • 2015年01月30日 14:55
  • 444KB
  • 下载

聊聊SpringBoot | 第一章:快速搭建SpringBoot第一个应用

快速搭建SpringBoot第一个应用 1.简介 本章仅介绍如何快速搭建第一个SpringBoot应用,细节内容下一章再做讲解,如果有需要,各位可以直接到Spring官网去了解。 从 Spring...
  • Evan_Leung
  • Evan_Leung
  • 2016-09-11 01:19:50
  • 1874

Spring Boot 事务的使用

Spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement 开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactio...
  • catoop
  • catoop
  • 2016-01-27 17:26:52
  • 104847

Spring boot +jdbctemplate

  • 2017年11月05日 22:01
  • 187KB
  • 下载

spring boot 2.0.0.M7 之 数据库-事务处理

事务处理更多干货spring-boot系列一 之restfull api与多环境配置springboot系列二之 日志SpringBoot系列三之 MVC 模版引擎SpringBoot 2.0.0.M...
  • qq_27384769
  • qq_27384769
  • 2018-01-10 10:03:09
  • 313

Spring Boot多数据源及其事务管理配置

Spring Boot多数据源及其事务管理配置Spring Boot多数据源及其事务管理配置 准备工作 配置文件 JavaConfig 配置数据源 配置JdbcTemplate 使用 事务配置 开启事...
  • u014633852
  • u014633852
  • 2017-04-08 11:22:52
  • 7775

在Spring Boot中使用数据库事务

我们在前面已经分别介绍了如何在Spring Boot中使用JPA(初识在Spring Boot中使用JPA)以及如何在Spring Boot中输出REST资源( 在Spring Boot中输出REST...
  • u012702547
  • u012702547
  • 2017-01-05 22:38:23
  • 14060

springboot入门代码

  • 2017年11月19日 17:25
  • 40.36MB
  • 下载

spring boot配置mybatis和事务管理

Spring Boot配置Mybatis一、spring boot与mybatis的配置1.首先,spring boot 配置mybatis需要的全部依赖如下: org.springframewor...
  • wohaqiyi
  • wohaqiyi
  • 2017-06-07 08:37:14
  • 40749
    个人资料
    持之以恒
    等级:
    访问量: 4716
    积分: 284
    排名: 27万+
    文章存档
    最新评论