spring及spring boot中事务相关知识的总结

spring 事务部分共5篇文章

第一篇:spring中@EnableTransactionManager @Transactional注解实现机制

第二篇:spring boot中事务功能自动配置的加载过程分析

第三篇:spring@Transactional注解属性字段含义

第四篇:spring @Transactional如何测试事务注解生效

第五篇:spring及spring boot中事务相关知识的总结

本篇为第五篇

 

基础知识1:java事务

Java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。

1、JDBC事务

JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交。 java.sql.Connection 提供了以下控制事务的方法:

public void setAutoCommit(boolean)

public boolean getAutoCommit()

public void commit()

public void rollback()

使用 JDBC 事务界定时,您可以将多个 SQL 语句结合到一个事务中。JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。

 

三种Java事务差异

 

JDBC事务控制的局限性在一个数据库连接内,但是其使用简单。

JTA事务的功能强大,事务可以跨越多个数据库或多个DAO,使用也比较复杂。

容器事务,主要指的是J2EE应用服务器提供的事务管理,局限于EJB应用使用。

基础知识2:两个注解

spring boot对事务的支持主要是两个注解:

@EnableTransactionManagement

会自动扫注解 @Transactional 的方法和类(表示该类中所有public的方法都需要开启事务的)

在spring boot中这个注解会在系统启动时自动加载,具体过程见下面的加载过程解析

@Transactional

使用注解来选择需要使用事务的方法(切入点),声明该方法需要事务支持,这是一个基于 AOP 的实现操作

@Transactional来修饰一个方法时,将mysql的底层事务进行了抽象,总结起来就做了3件事:

1. 将autocommit=off,为回滚做准备

2. 根据配置的isoliation,set tx_isolation,默认是RC级别,所以即便你的mysql的tx_isolation是RR级别,但通过spring transaction会重新制定tx_isolation,优先级要高于mysql设置的tx_isolation

3. 在方法执行过程中如果报错,执行rollback,否则执行commit

总结spring及spring boot中事务的使用

  1. 第1条线:注册需要的bean。

    @EnableTransactionManagement加载处理类AutoProxyRegistrar以及ProxyTransactionManagementConfigration,注册事务增强器Advisor,以及事务拦截器interceptor。

  2. 第2条线:为标注@Transactional的bean返回增强后的代理对象

    利用InfrastructureAdvisorAutoProxyCreator后置处理器机制在对象创建以后,包装对象,返回一个代理对象(增强器)。在对对象进行字节码提升的过程中,通过SpringTransactionAnnotationParser识别@Transactional注解,为join point连接点在指定的切点pointcut位置,将TransactionAdvisor织入weave TransactionInterceptor(与spring aop中BeforeAdvice,AfterAdvice都转换为MethodInterceptor,是相同的做法)

  3. 在 TransactionInterceptor执行invoke方法,

    将mysql的底层事务进行了抽象,总结起来就做了3件事:

    1. 将autocommit=off,为回滚做准备

    2. 根据配置的isoliation,set tx_isolation,默认是RC级别,所以即便你的mysql的tx_isolation是RR级别,但通过spring transaction会重新制定tx_isolation,优先级要高于mysql设置的tx_isolation

    3. 在方法执行过程中如果报错,执行rollback,否则执行commit

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值