一个初学者的笔记
一.Spring 的事务管理的 API
1.PlatformTransactionManager:平台事务管理器
平台事务管理器:接口,是 Spring 用于管理事务的真正的对象。
- DataSourceTransactionManager :底层使用 JDBC 管理事务
- HibernateTransactionManager :底层使用 Hibernate 管理事务
2.TransactionDefinition :事务定义信息
事务定义:用于定义事务的相关的信息,隔离级别、超时信息、传播行为、是否只读
3.TransactionStatus:事务的状态
事务状态:用于记录在事务管理过程中,事务的状态的对象。
事务管理的 API 的关系
Spring 进行事务管理的时候,首先平台事务管理器根据事务定义信息进行事务的管理, 在事务管理过程中,产生各种状态,将这些状态的信息记录到事务状态的对象中。
二.事务的传播机制(行为)
事务的传播性一般用在事务嵌套的场景,比如一个事务方法里面调用了另外一个事务方法,那么两个方法是各自作为独立的方法提交还是内层的事务合并到外层的事务一起提交,这就是需要事务传播机制的配置来确定怎么样执行。
1.保证多个操作在同一个事务中
- PROPAGATION_REQUIRED :
默认值,如果 A 中有事务,使用 A 中 的事务,如果 A 没有,创建一个新的事务,将操作包含进来 - PROPAGATION_SUPPORTS :
支持事务,如果 A 中有事务,使用 A 中的事务。如果 A 没有事务,不使用事务。 - PROPAGATION_MANDATORY :
如果 A 中有事务,使用 A 中的事务。 如果 A 没有事务,抛出异常。
2.保证多个操作不在同一个事务中
-
PROPAGATION_REQUIRES_NEW :
如果 A 中有事务,将 A 的事务挂 起(暂停),创建新事务,只包含自身操作。如果 A 中没有事务, 创建一个新事务,包含自身操作。 -
PROPAGATION_NOT_SUPPORTED:
如果 A 中有事务,将 A 的事务挂起 -
PROPAGATION_NEVER :
如果 A 中有事务,报异常。
3.嵌套式事务
- PROPAGATION_NESTED :
嵌套事务,如果 A 中有事务,按照 A 的事务执行,执行完成后,设置一个保存点,执行 B 中的操作,如 果没有异常,执行通过,如果有异常,可以选择回滚到最初始位置, 也可以回滚到保存点。
三.正片开始
下面我们以一个转账功能的转入转出来做以说明
1.XML 方式的声明式事务管理
1.引入相关的jar包
2.编写applicationContext.xml文件
1.配置连接数据库
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--开启注解-->
<context:component-scan base-package="com.it.spring.tx2.*"></context:component-scan>
<!-- 引入工程中src下的db.properties文件-->