事务管理储备知识--模拟银行转账

目录

1.事务的概念

2.事物的特性(ACID)

        (1)原子性(Atomicity):

        (2)一致性(Consistency):

        (3)隔离性(Isolation):

        (4)持久性(Durability):

3.事务管理的核心接口

 (1)Platform TransactionManager(事务管理器)

(2)TransactionDefinition(事务定义信息)

(3)TransactionStatus(事务状态信息)

4.Spring事务管理分两种方式:

(1)编程式事务管理

(2)声明式事务管理

1.基于XML方式的声明式事务

2.基于注解方式的声明式事务


1.事务的概念

        实际开发中,操作数据库时会涉及到事务管理问题,为此Spring提供了专门用于事务处理的APISpring的事务管理简化了传统的事务管理流程,并且在一定程度上减少了开发者的工作量。

        事务是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合。

2.事物的特性(ACID)

        (1)原子性(Atomicity):

        一个事务已经是一个不可再分割的工作单位。事务中的全部操作要么都做;要么都不做

        (2)一致性(Consistency):

        事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。

        (3)隔离性(Isolation):

        事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。

        (4)持久性(Durability):

        一个事务一旦提交,它对数据库中数据的改变会永久存储起来。其他操作不会对它产生影响

3.事务管理的核心接口

        在Spring的所有JAR包中,包含一个名为spring-tx-5.3.9JAR包,该包就是Spring提供的用于事务管理的依赖包。在该JAR包的org.springframework.transaction包中,3接口文件PlatformTransactionManagerTransactionDefinitionTransactionStatus

 (1)Platform TransactionManager(事务管理器)

         PlatformTransactionManager接口是Spring提供的平台事务管理器,主要用于管理事务。该接口中提供了三个事务操作的方法,具体如下

(2)TransactionDefinition(事务定义信息)

         TransactionDefinition接口是事务定义(描述)的对象,该对象中定义了事务基本属性,并提供了获取事务基本属性的方法,具体如下

事务的基本事务属性:

传播行为(propagation behavior):当事务方法被另一个事务方法调用时,必须指定事务应该如何传播Spring定义了七种传播行为。

事务传播行为

  • 指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。

传播行为说明
REQUIRED【默认】当前如果有事务,Spring就会使用该事务;否则会开始一个新事务(增、删、改)
SUPPORTS当前如果有事务,Spring就会使用该事务;否则不会开始一个新事务(查询)
MANDATORY当前如果有事务,Spring就会使用该事务;否则会抛出异常
REQUIRES_NEW当前如果有事务,把当前事务挂起,新建事务
NOT_SUPPORTED当前有事务,Spring也会在非事务环境下执行。如果当前有事务,则该事务挂起
NEVER当前有事务,Spring也会在非事务环境下执行。如果当前有事务,则抛出异常
NESTED当前有事务,则在嵌套事务中执行。如果没有,那么执行情况与REQUIRED一样

隔离级别(isolation level):定义了一个事务可能受其他并发事务的影响程度。多个事务并发运行,经常会操作相同的数据来完成各自的任务,可能会出现脏读,不可重复读和幻读的问题。隔离级别有四种。

Spring事务隔离级别

隔离级别由低到高【读未提交】=>【读已提交】=>【可重复读】=>【序列化操作】

隔离级别说明脏读不可重复读幻读
ISOLATION_DEFAULTspring默认数据库的隔离级别
ISOLATION_READ_UNCOMMITTED读未提交
ISOLATION_READ_COMMITTED读已提交×
ISOLATION_REPEATABLE_READ可重复读××
ISOLATION_SERIALIZABLE序列化操作×××

是否只读(isReadOnly):如果一个方法内都是对数据库的select操作,那么可以设置方法事务为只读,数据库也会对该事务进行特定的优化。只读事务内不能有insertupdatedelete的操作

事务超时(timeout):事务可能设计对后端数据库的锁定,所以长时间的事务运行会不必要的占用数据库资源,设置事务超时时间可以及时释放资源

(3)TransactionStatus(事务状态信息)

TransactionStatus接口是事务的状态,它描述了某一时间点上事务的状态信息。该接口中包含6个方法,具体如下

4.Spring事务管理分两种方式:

(1)编程式事务管理

        定义:通过编写代码实现的事务管理

        步骤1:添加事务管理器组件applicationContext.xml中配置一个事务管理器组件,提供对事务处理的全面支持和统一管理

步骤2:在业务逻辑类中使用事务管理器

@Autowired

private PlatformTransactionManager txManager;

步骤3:在方法中编程实现事务管理

缺点:产生了耦合,产生了代码冗余,不方便代码的维护和扩展。

(2)声明式事务管理

        定义:通过XML配置或者注解的方式实现的事务管理

        原理:通过AOP技术实现的事务管理,主要思想是将事务作为一个“切面”代码单独编写,然后通过AOP技术将事务管理的“切面”植入到业务目标类中

1.基于XML方式的声明式事务

                步骤1:添加事务管理器组件

                步骤2:使用<tx:advice>标签配置事务规则

                步骤3:使用<aop:config>配置事务切面

2.基于注解方式的声明式事务

步骤一:在Spring配置类加上

        //启动平台事务管理
        @EnableTransactionManagement

步骤二: 配置事务管理器(在JDBC配置),mybatis使用的是jdbc事务
    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource){
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource);
        return transactionManager;
    }

步骤三:业务层实现类修改代码,加上@Transactional

编程式事管理编程式事务管理编程式事务管理编程式事

务管理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值