一、事务的概念

1.Spring事务的原理图

spring中如何手动提交一下事务 spring 事务提交_spring中如何手动提交一下事务

 

2.事务的作用:保证数据一致性,保证一组Dao操作能够一起成功,一起失败。

(1)事务应用在哪一层? Service业务层

(2)事务控制的方式?

JDBC:Connection.setAutoCommit(false);  //设置手动提交

        Connection.commit(); //提交

        Connection.rollback();//回滚

 

3.Spring的事务管理有两种方式:

(1)声明式事务管理(重点)

在配置文件中配置属性声明,基于AOP方式实现事务操作,也是将事务管理作为一个切面,织入到目标方法实现事务的管理;

(2)编程式事务管理

自己编写管理事务方式,即进行提交和异常回滚等操作,只有少数业务操作时适合;

 

4.声明式事务管理

事务划分为额外功能,对于spring而言,把额外功能添加给核心方法,需要使用AOP中的动态代理。

开发步骤:I.创建原始类

                  II.配置原始类的相关信息

                  III.书写额外功能(事务--spring)

                  IV.配置额外功能类的相关信息

                  V.定义切点

                  VI.组装切面

 

spring中如何手动提交一下事务 spring 事务提交_spring_02

 

spring中如何手动提交一下事务 spring 事务提交_默认值_03

 

5.Spring的事务属性 

隔离属性、传播、只读、超时、异常属性

(1) 隔离属性 isolation

   a、脏读:一个事务读取了另一个事务尚未提交的数据

spring中如何手动提交一下事务 spring 事务提交_回滚_04

        

b、重复读

spring中如何手动提交一下事务 spring 事务提交_spring中如何手动提交一下事务_05

c、幻影读

默认值:default  使用数据库默认的隔离属性

MySQL数据库:REPEATABLE_READ (行锁)

Oracle数据库:READ_COMITTED(列锁)

安全性:表锁>行锁>列锁

性能:列锁>行锁>表锁、

spring中如何手动提交一下事务 spring 事务提交_默认值_06

 

(2)传播属性  propagation

作用:事务嵌套问题

propagation=”REQUIRED”  默认值   当外层有事务则融合到新的事务中,外部没有事务则开启新的事务  (适用于增删改)

propagation=”SUPPORTS”  当外层有事务则融合到新的事务中,外部没有事务则不开启新的事务  (适用于查,提高查询效率)

 

 (3)只读属性 readonly

readonly: false默认
          true  (查询时可以提高查询效率)

 

(4)超时属性 timeout

 作用:当该数据被占用时,指定等待时长

默认值:-1  根据数据库的超时属性默认值

 

(5)异常属性

rollback-for :可以指定回滚的异常

no-rollback-for:可以指定提交的异常

   默认会对RunTimeException及其子类进行回滚,会对非RunTimeException进行提交。

增删改:全用默认值  isolation=”default”

                            propagation=”REQUIRED”

                            readonly=”false”  timeout=”-1”

查询:propagation=”SUPPORTS”  readonly=”true” 提高查询效率