关闭

Spring Boot 事物的快速应用

标签: spring-boot事务
37人阅读 评论(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)
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

spring学习笔记(一)快速搭建一个spring boot应用

一、spring boot介绍 二、使用spring boot快速搭建一个web应用
  • u013737646
  • u013737646
  • 2016-02-15 17:08
  • 2020

如何使用Spring Boot快速创建Web应用

作者:千锋JavaEE郑州校区讲师---黄胜涛         Spring Boot 让我们开发java项目开发过程更加高效敏捷,今天我用一个简单的例子给大家分享一下如何用Spring B...
  • u011277123
  • u011277123
  • 2017-05-26 13:25
  • 287

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

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

Spring Boot 快速搭建及简单演示

1、 官网开速生成项目 1.1 在浏览器上输入地址:http://start.spring.io/。 可以选择一maven和gradle,我这里用maven来构建项目 1.2 填写maven信...
  • xiaolyuh123
  • xiaolyuh123
  • 2017-04-24 14:30
  • 567

使用SpringBoot快速构建应用程序

1.Spring MVC和Spring Boot自带的web构建方式有所区别。Spring提供了spring-boot-starter-web自动配置模块。 2. 添加如下依赖 org.s...
  • u010570551
  • u010570551
  • 2016-06-16 15:02
  • 1197

关于spring boot 事务

redis事务 redis最好的事务方式还是用它自己的watch 读数据,然后再用multi进行锁定,最后用exec执行,如果成功返回[null,true],如果失败返回操作结果[结果,fals...
  • evane1890
  • evane1890
  • 2017-03-13 00:03
  • 1747

在Spring Boot中使用数据库事务

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

Spring Boot 中使用 @Transactional 注解配置事务管理

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP...
  • nextyu
  • nextyu
  • 2017-11-29 21:15
  • 308

SpringBoot入门之零基础搭建web应用

引言之前也没有深入学习过spring框架,最近SpringBoot流行起来后想补下这方面的知识,于是照着SpringBoot官网上的英文教程开始helloworld入门,踩到几个小坑,记录下学习流程。...
  • ksqb0373103
  • ksqb0373103
  • 2017-03-11 19:18
  • 892

Spring Boot 事务的使用

spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement 开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactio...
  • zmken497300
  • zmken497300
  • 2017-01-07 09:43
  • 1035
    个人资料
    • 访问:655次
    • 积分:189
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:2篇
    • 译文:0篇
    • 评论:1条
    文章分类
    文章存档
    最新评论