`
liuyu_nz
  • 浏览: 12054 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Spring事务控制API详解

阅读更多

注意声明式事务不支持集群(分布式)的事务处理,如果是集群或者分布式的需要用编程式事务,利用jta实现

Spring对事务的控制的API全部位于org.springframework.transaction包下面,其中出去异常定义的类外,仅有四个接口,这四个接口是Spring操作事务的核心,下面一一介绍:

org.springframework.transaction
Interfaces
        PlatformTransactionManager
        SavepointManager
        TransactionDefinition
        TransactionStatus
Exceptions
        CannotCreateTransactionException
        HeuristicCompletionException
        IllegalTransactionStateException
        InvalidIsolationLevelException
        InvalidTimeoutException
        NestedTransactionNotSupportedException
        NoTransactionException
        TransactionException
        TransactionSuspensionNotSupportedException
        TransactionSystemException
        TransactionTimedOutException
        TransactionUsageException
        UnexpectedRollbackException
要搞明白Spring事务控制的原理,必须理解上面四个接口的含义,下面一一介绍之。
1、PlatformTransactionManager
是一个事务管理平台,该接口有许多具体的事务实现类,例如DataSourceTransactionManager, HibernateTransactionManager, JdoTransactionManager, JmsTransactionManager, JpaTransactionManager, JtaTransactionManager, TopLinkTransactionManager, WebLogicJtaTransactionManager 等等,通过实现此接口,Spring可以管理任何实现了这些接口的事务。开发人员也可以使用统一的编程模型来控制管理事务。此接口中有三个方法:
void commit(TransactionStatus status)
          Commit the given transaction, with regard to its status.
          监视事务状态,并提交一个事务。
TransactionStatus getTransaction(TransactionDefinition definition)
          Return a currently active transaction or create a new one, according to the specified propagation behavior.
          根据事务的隔离级别和传播行为,返回当前活动的事务或者产生一个新的事务。
void rollback(TransactionStatus status)
          Roll back the given transaction.
          回滚给定的事务。
2、SavepointManager
事务回滚点管理接口,提供创建、释放回滚点,或者回滚到指定的回滚点。
方法摘要:
Object createSavepoint()
          Create a new savepoint.
          创建一个新的回滚点。
void releaseSavepoint(Object savepoint)
          Explicitly release the given savepoint.
          释放一个给定的回滚点。
void rollbackToSavepoint(Object savepoint)
          Roll back to the given savepoint.
          回滚到给定的回滚点。
3、TransactionDefinition
这个接口的作用就是定义事务的名称、隔离级别、传播行为、超时时间长短、只读属性等。
字段摘要:
(因为是接口,里面都是int常量,即public static final类型的,很多,我就只写常量的名字和含义)
这些接口分两组,分别是事务隔离级别和事务传播行为。
//事务隔离级别(数据库级别的知识)
TransactionDefinition.ISOLATION_DEFAULT
使用底层数据库默认隔离级别。
TransactionDefinition.ISOLATION_READ_UNCOMMITTED 读未提交
最低隔离等级,允许事务读取其他并行的事务还没有提交的数据,会发生脏读(dirty reads)、不可重复读(non-repeatable reads)、幻读(phantom read)等问题。
TransactionDefinition.ISOLATION_READ_COMMITTED 读已提交
允许事务读取其他并行的事务已经提交的数据,可以防止脏读问题。
TransactionDefinition.ISOLATION_REPEATABLE_READ 可重复读
保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。
TransactionDefinition.ISOLATION_SERIALIZABLE 可串行化
所有事务都严格隔离,各个事务顺序执行。很容易发生死锁。
//事务传播行为
TransactionDefinition.PROPAGATION_REQUIRED
支持现有的事务,如果没有则新建一个事务。
TransactionDefinition.PROPAGATION_SUPPORTS
支持现有的事务,如果没有则以非事务状态运行。
TransactionDefinition.PROPAGATION_MANDATORY
支持现有事务,如果没有则抛出异常。
TransactionDefinition.PROPAGATION_REQUIRES_NEW
总是发起一个新事务。如果当前已存在一个事务,则将其挂起。
TransactionDefinition.PROPAGATION_NOT_SUPPORTED
不支持事务,总是以非事务状态运行,如果当前存在一个事务,则将其挂起。
TransactionDefinition.PROPAGATION_NEVER
不支持事务,总是以非事务状态运行,如果当前存在一个事务,则抛出异常。
TransactionDefinition.PROPAGATION_NESTED
如果石阡已经存在一个事务,则以嵌套事务的方式运行,如果当前没有事务,则创建一个新事务。
方法摘要:
int getIsolationLevel()
          Return the isolation level.
          返回事务的隔离级别。
String getName()
          Return the name of this transaction.
          返回事务的名字。
int getPropagationBehavior()
          Return the propagation behavior.
          返回事务的是传播行为。
int getTimeout()
          Return the transaction timeout.
          返回事务的超时时间。
boolean isReadOnly()
          Return whether to optimize as read-only transaction.
          返回是否(优化为)只读属性。
4、TransactionStatus
这个接口的作用就是获取事务的状态(回滚点、是否完成、是否新事物、是否回滚)属性,还可以进行事务rollback-only的设置。
方法摘要:
boolean hasSavepoint()
          Return whether this transaction internally carries a savepoint, i.e. has been created as nested transaction based on a savepoint.
          判断这个事务是否有一个内在的回滚点(savepoint),即创建为基于回滚点的嵌套事务。
boolean isCompleted()
          Return whether this transaction is completed, that is, has already been committed or rolled back.
          判断这个事务是否完成,也就是已经提交或者回滚。
boolean isNewTransaction()
          Return if the transaction is new, else participating in an existing transaction.
          判断一个事物是否为新事务,或者是这个事务参与到一个已经存在的事务里面。
boolean isRollbackOnly()
          Return if the transaction has been set rollback-only.
          判断这个事务是否已经设置了rollback-only。
void setRollbackOnly()
          Set the transaction rollback-only.
          设置这个事务rollback-only。
分享到:
评论

相关推荐

    Spring API

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知...

    SSM框架教程Spring+SpringMVC+MyBatis全覆盖_Java热门框架视频教程

    7、Spring的声明式事务控制 8、SpringMVC的介绍及其快速入门 9、SpringMVC的数据请求和响应 10、SpringMVC的异常处理及其拦截器 11、MyBatis简介及其入门 12、MyBatis的配置文件详解 13、MyBatis的多表操作 适用...

    Spring-Reference_zh_CN(Spring中文参考手册)

    7.4. Spring里的advisor(Advisor) API 7.5. 使用ProxyFactoryBean创建AOP代理 7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用“全局”...

    spring.doc

    5.1.8.2Spring事务的传播属性 117 5.1.8.3Spring事务的隔离级别 117 拓展: 118 5.1.8.4以XML配置的 形式 119 拓展: 120 5.1.8.5以注解方式配置 125 拓展: 127 5.1.9使用CGLIB以XML形式配置事务 130 5.2 Spring+...

    Spring 2.0 开发参考手册

    7.4. Spring里的advisor(Advisor) API 7.5. 使用ProxyFactoryBean创建AOP代理 7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用...

    spring chm文档

    7.4. Spring里的advisor(Advisor) API 7.5. 使用ProxyFactoryBean创建AOP代理 7.5.1. 基础 7.5.2. JavaBean属性 7.5.3. 基于JDK和CGLIB的代理 7.5.4. 对接口进行代理 7.5.5. 对类进行代理 7.5.6. 使用...

    Spring中文帮助文档

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知...

    Spring.3.x企业应用开发实战(完整版).part2

    10.3.1 Spring事务传播机制回顾 10.3.2 相互嵌套的服务方法 10.4 多线程的困惑 10.4.1 Spring通过单实例化Bean简化多线程问题 10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的...

    spring boot 全面的样例代码

    - chapter1:[基本项目构建(可作为工程脚手架),引入web模块,完成一个简单的RESTful API](http://blog.didispace.com/spring-boot-learning-1/) - [使用Intellij中的Spring Initializr来快速构建Spring Boot/...

    Spring高级之注解驱动开发视频教程

    它里面包含了Spring,SpringMVC,SpringData(事务),SrpingTest等等。 其中: Spring本身里面包含了两大核心IOC和AOP。IOC负责降低我们代码间的依赖关系,使我们的项目灵活度更高,可复用性更强。AOP是让方法间...

    Spring3.x企业应用开发实战(完整版) part1

    10.3.1 Spring事务传播机制回顾 10.3.2 相互嵌套的服务方法 10.4 多线程的困惑 10.4.1 Spring通过单实例化Bean简化多线程问题 10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的...

    springboot学习

    chapter4-2-3:对log4j进行多环境不同日志级别的控制 chapter4-2-4:使用AOP统一处理Web请求日志 chapter4-2-5:使用log4j记录日志到MongoDB chapter4-2-6:Spring Boot 1.5.x新特性:动态修改日志级别] 安全管理 ...

    详解Java的MyBatis框架中的事务处理

    利用MyBatis框架的配置管理比直接使用JDBC API编写事务控制要来得更加轻松,这里我们就来详解Java的MyBatis框架中的事务处理,尤其是和Spring框架集成后更加exciting

    低清版 大型门户网站是这样炼成的.pdf

    6.1.3 spring 2.5拿手戏——控制反转与依赖注入 353 6.1.4 何为“面向切面编程aop” 356 6.1.5 spring 2.5圣经——面向接口编程 358 6.1.6 开始spring 2.5旅程—hello world 359 6.2 spring 2.5核心技术 364 ...

    JAVA-ACE-架构师系列视频教程在线观看地址- RocketMQ(订单实战上下全集)

    10010_RocketMQ_Producer_API详解 11011_RocketMQ_Producer_顺序消费机制详解 12012_RocketMQ_Producer_事务消息机制详解 13013_RocketMQ_Consumer_Push和Pull模式及使用详解 14014_RocketMQ_Consumer_配置参数详解 ...

    RocketMq学习视频

    010-010_RocketMQ_Producer_API详解 011-011_RocketMQ_Producer_顺序消费机制详解 012-012_RocketMQ_Producer_事务消息机制详解 013-013_RocketMQ_Consumer_Push和Pull模式及使用详解 014-014_RocketMQ_Consumer_...

    rocketmq教程两套

    010-010_RocketMQ_Producer_API详解 011-011_RocketMQ_Producer_顺序消费机制详解 012-012_RocketMQ_Producer_事务消息机制详解 013-013_RocketMQ_Consumer_Push和Pull模式及使用详解 014-014_RocketMQ_Consumer_...

    J2EE应用开发详解

    104 第8章 Struts2框架 105 8.1 Web应用的发展 105 8.2 Struts2的起源和体系结构 106 8.3 Struts2核心部分详解 108 8.3.1 核心控制器FilterDispatcher 108 8.3.2 业务逻辑控制器Action 111 8.3.3 业务逻辑组件 116 ...

    详解spring boot中使用JdbcTemplate

    JdbcTemplate 是在JDBC API基础上提供了更抽象的封装,并提供了基于方法注解的事务管理能力。 通过使用SpringBoot自动配置功能并代替我们自动配置beans,下面给大家介绍spring boot中使用JdbcTemplate相关知识,一起...

    2017年最新JAVA-ACE-架构师系列视频课程- RocketMQ(上下集)

    10010_RocketMQ_Producer_API详解24:49 11011_RocketMQ_Producer_顺序消费机制详解24:37 12012_RocketMQ_Producer_事务消息机制详解38:15 13013_RocketMQ_Consumer_Push和Pull模式及使用详解28:21 14014_RocketMQ_...

Global site tag (gtag.js) - Google Analytics