IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> spring事务 -> 正文阅读

[Java知识库]spring事务

事务:
原子性(atomicity) : 要么同时成功,要么同时失败
一致性(consistency) : 最后数据完整性不能被破坏
隔离性(isolation) : 事务之间互不影响
持久性(durability) : 事务完成后,对数据的修改是永久的,不可恢复


分类:

  • 编程式事务
  • 声明式事务

spring中事务类:
PlatformTransactionManager 定义了事务的操作方法
在这里插入图片描述
TransactionDefinition 定义了事务的属性。。隔离性,传播性,是否只读,超时时间,回滚规则
在这里插入图片描述
回滚规则:RuntimeException 和 error
在这里插入图片描述

TransactionStatus:事物本身
在这里插入图片描述

声明式事务使用:

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

在这里插入图片描述

@Service
public class UserService {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Autowired
    UserService2 userService2;


//    @Transactional(propagation = Propagation.REQUIRES_NEW)
    @Transactional
    public void transfer(){
        jdbcTemplate.update("update account set money=? where username=?",100,"cc");
        userService2.update();
    }
}
@Service
public class UserService2 {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void update(){

            jdbcTemplate.update("update account set money=? where username=?",100,"wy");
            int i =1/0;

    }
}

spring事务传播类型7种
传播性:多个事务方法互相调用的时候,描述事务要怎么处理,事务如何在这些方法间传播

  • required:
    默认:如果当前存在事务的话,就加入到当前事务里面去,如果当前没有事务的话,就创建一个新的事务。。因为这两个方法都在同一个事务中执行,所以只要有任意一个抛出异常,都会导致整体回滚
  • required_new
    可能会同时出现两个事务,,如果当前存在事务,则将当前事务挂起,里面再开启一个事务,独自运行。。带来的问题:里面的方法会自己开事务,,如果外面的事务抛出异常,并不会导致里面的回滚,因为里面是一个独立的事务。。如果里面的方法抛出异常,,里面的事务会回滚,但是,如果这个异常被处理掉了,外部事物不会回滚,如果这个异常没有处理,外部事务回滚
  • nested : 嵌套的
    嵌套事务,如果当前存在事务,就会创建一个事务作为嵌套事务来运行,如果没有事务,相当于require
    嵌套事务:外部事物的子事务,主事务回滚,子事务跟着一起回滚。。子事务回滚,不会影响主事务,也不会影响其他的子事务
  • mandatory 强制性的
    如果存在当前事务就加入到当前事务,如果当前没有事务,抛出异常
    自己不创建事务,必须加到别的事务中去
  • supports
    如果存在当前事务就加入到当前事务,如果没有,则以非事务的方法继续运行
  • not_support
    以非事务方式运行,如果当前存在事务就将当前事务挂起
  • never
    以非事务方式运行,如果有事务,抛异常

image-20220331083657694
image-20220331083805218

spring事务失效

  • 方法必须是public
  • MyISAM引擎不支持事务
  • 使用this调用@Transactional方法。。自身调用,没有经过Aop

问题:
不走索引会升级成表锁

		create unique index index_name on account(username)

为什么不用@EnableTransactionManagement就能开启事务
在这里插入图片描述
在这里插入图片描述
引用:https://blog.csdn.net/z69183787/article/details/114633108

引用:https://mp.weixin.qq.com/s/6tRPXwXnWUW4mVfCdBlkog

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:11:18  更:2022-04-01 23:11:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:29:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码