关于Spring事务隔离、传播属性与@Transactional注解
作者:wangjun5159 发布时间:2021-11-15 04:37:11
mysql默认的隔离级别是repeatable_read
根据spring文档,数据库一共有4个隔离级别
read_uncommit
read_commited
读已提交 ,解决了脏读
repeatable_read
可重复读,解决了不可重复读
serializable
顺序化 ,解决了幻读
对应的java类,org.springframework.transaction.annotation.Isolation
脏读
事务1修改了行1,但是还没commit,事务2读取了未commit的行1,事务1回滚了行1;
不可重复读
事务1读了行1,事务2修改了行1并commit,事务1再次读了行1,发现行1变了。
幻读
事务1读了满足where条件的所有行,事务2插入了满足where的一行,事务1再读同样的where条件时,获取了额外的“幻行”。
spring传播属性
spring事务传播属性,org.springframework.transaction.annotation.Propagation
,其他有
required
当前有事务,则利用已有事务;当前没有事务,则创建事务;
required_new
创建新事物,如果存在事务,暂停当前事务;注意这里的措辞,先创建新事务,然后再判断是否存在事务,如果存在,则暂停;
supports
当前有事务,使用当前事务,否则无事务执行;
nested
如果当前存在事务,则创建子事务,其他的就跟required相同;只在特定的事务管理器支持nested,开箱即用的有JDBC DataSourceTransactionManager,有些JTA providers可能也支持nested事务;
never
非事务执行,如果有事务则抛出异常;
mandatory
使用当前事务,如果没有事务则抛出异常;
@Transactional注解
@Transactional注解 事务超时时间:依赖底层事务系统,取决于数据库。
rollbackfor
默认RuntimeException回滚;checked exceptions(business exception)不会回滚;
readonly
只能有查询语句,不能有update、insert语句,仅对required、required_new起作用。
总结
隔离级别和传播属性是两个概念,隔离级别属于数据库,传播属性是spring的,它们的所有者是不同的;隔离级别是为了解决事物间影响的问题;传播属性是为了解决,方法间事务互相利用的问题;
来源:https://wangjun5159.blog.csdn.net/article/details/115251146
猜你喜欢
- 问题今天在springboot中使用mybatis的时候不能字段不能够进行自动映射,mybatis的版本是3.5.11,数据库是按照下划线进
- 1.封装分页Page类package com.framework.common.page.impl;import java.io.Seria
- import java.io.*;import java.text.SimpleDateFormat;import java.util.*;
- 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现。对于文件上传,浏览器在上
- 1、阿里云DNS的SDK依赖<dependency> <groupId>com.aliyu
- 引言用过Spring Cloud的同学都知道在使用动态配置刷新的我们要配置一个 @RefreshScope,在类上才可以实现对象属性的的动态
- 一、线程的优先级别线程优先级别的使用范例:package cn.galc.test;public class TestThread6 { p
- 一 前言学习微服务要从基础的架构学起,首先你要有个微服务的概念才能学习对吧!!如果你都不知道啥是微服务,就一头扎进去学习,你自己也觉得自己也
- 这篇文章主要介绍了基于spring security实现登录注销功能过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的
- 1、简单又有效的方法是使用PreparedStatement采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX(如:s
- JVM管理两种类型的内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。它和
- java8的stream流能完美解对象集合去重问题. List<UserCar> list1 = new ArrayList()
- Java语言中反射 * 接口的解释与演示Java在JDK1.3的时候引入了 * 机制、可以运用在框架编程与平台编程时候捕获事件、审核数据
- 引导要求:线程资源必须通过线程池提供,不允许在应用自行显式创建线程;说明:使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开
- Java是怎么跨平台的我们上计算机课的时候老师讲过:"计算机只能识别0和1,所以我们写的程序要经过编译器翻译成0和1组成的二进制格
- 本文介绍了Java开发过程中日期相关操作,分享的代码如下:package jse;import java.io.UnsupportedEnc
- 面试官:sychronized关键字有哪些特性?应聘者:可以用来修饰方法;可以用来修饰代码块;可以用来修饰静态方法;可以保证线程安全;支持锁
- 重写java object类的equals方法覆盖equals方法请遵守约定什么情况下要覆盖equals方法容易违反的对称性不易察觉的传递性
- Zookeeper和Eureka哪个更好?1、CAP理论一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求C:数据一致性
- public class OracleJdbcTest { &nbs