码迷,mamicode.com
首页 > 编程语言 > 详细

Spring -事务管理

时间:2018-05-23 10:23:03      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:还需要   com   事务隔离级别   mtr   提交   scom   事务   connect   strong   

 

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 -事务管理

标签:还需要   com   事务隔离级别   mtr   提交   scom   事务   connect   strong   

原文地址:https://www.cnblogs.com/thyHome/p/9075017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!