Spring -事务管理
Posted floatthy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring -事务管理相关的知识,希望对你有一定的参考价值。
Java事务导引
事务:正确执行一系列操作(或动作),使得数据库从一种状态转移成另一种状态,保证操作全部成功,或者全部失败
事务原则:服从ISO/IEC指定的ACID原则
ISO/IEC:14443 识别卡 -- 非接触式集成电路卡
原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
DataSource
Java事务:在Java编写的程序或者系统中,实现ACID的操作
实现范围:
通过JDBC相应方法间接实现对数据库的增删改查,把事务转移到Java代码中控制,确保事务要么全部执行成功,要么撤销不执行
总结:Java事务机制和原理就是确保数据库操作的ACID特性
Java事务类型:
JDBC事务:Connection对象控制,包括手动模式和自动模式---------局限在一个数据库连接,但是使用简单
JTA(Java Transaction API)事务:与实现无关,与协议无关的API------------功能强大,可跨越数据库或DAO,使用复杂
容器事务:应用服务器提供,且大多基于JAT完成(通常基于JNDI,API复杂)-----------J2EE应用服务器提供的事务管理,局限于EJB
Spring事务核心接口
PlatformTransactionManager接口
Spring事务属性
是否是新事务(isNewTransaction)
是否有savepoint(诊断,NESTED):hasSavepoint
是否完成(isCompleted)
事务属性范围
事务属性定义
事务读取类型
脏读
不可重复读
幻读
事务隔离级别(IsolationLevel)
spring事务传播行为(PropagationBehavior)
事务是否只读(isReadOnly)
Oracle的”readOnly”没有作用,不影响增删改查
MySQL的”readOnly”为true,只能查,增删改抛出异常
事务超时(Timeout)
事务回滚
默认情况下,事务遇到运行期异常才会回滚,而在遇到检查型异常不回滚
自定义:
1、 声明事务在遇到特定的检查型异常时像遇到运行时异常那样回滚
2、 声明事务在遇到特定的异常不回滚,即使是运行时异常
事务接口
通过事务管理器获得TransactionAtatus实例
控制事务在回滚或者提交的时候需要应用对应的事务状态
Spring事务接口
编程式事务管理
事务管理器(PlatformTransactionManager)
1、 类似应用JTA UserTransaction API方式,异常处理更简洁
2、 核心类:spring事务管理的三个接口类以及JDBC template类
模板事务(TransactionTemplate)
JDBC Template类
编程事务步骤:
1、 需要有效的数据源,具体数据源根据实际情况创建
2、 创建编程事务管理对象
定义TransactionTemplate
使用TransactionTemplate
有返回值
没有返回值
如果需要处理异常
3、 业务逻辑:基于JDBC template完成业务处理
声明式事务管理(AOP)
XML方式配置
1、 添加schema
2、 定义事务管理器
3、 定义事务Advice
<tx:method/>
Name:匹配的函数名称、支持*匹配
Propagation:事务传播行为
Isolation:事务隔离级别
Timeout:超时
Read-only:是否只读事务
Rollback-for:触发回滚的异常,逗号分隔
No-rollback-for:不触发回滚的异常,逗号分隔
4、 定义pointcut
注意:注入事务的类,还需要注入DataSource的属性
注解方式配置
1、 添加schema
2、 定义事务管理器
3、@Transactional
value:使用的TransactionManager
propagation:事务传播行为
isolation:事务隔离级别
timeout:超时
readOnly:是否只读事务
RollbackFor:触发回滚的异常类对象数组
RollbackForClassName:触发回滚的异常类名称数组
noRollbackFor:不触发回滚的异常类对象数组
noRollbackForClassName:不触发回滚的异常类名称数组
配置类型:
5种:独立代理;共享代理;拦截器;(这三种2.0版本之后不推荐使用)
Tx拦截器;全注释
使用范围
编程式事务在代码量比较小的时候使用,声明式事务在事务操作量多时候常常使用
以上是关于Spring -事务管理的主要内容,如果未能解决你的问题,请参考以下文章
Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC
学习笔记——Spring简介;Spring搭建步骤;Spring的特性;Spring中getBean三种方式;Spring中的标签
Spring DAO vs Spring ORM vs Spring JDBC