Spring 事务管理

栏目: Java · 发布时间: 6年前

  • 逻辑上的一组操作,这组操作要么全部成功,要么全部失败。
  • 事务的特性:
    • 原子性
      • 事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生
    • 一致性
      • 执行事务前后数据的完整性必须保持一致
    • 隔离性
      • 多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据相互隔离
    • 持久性
      • 事务一旦提交完成,数据修改是永久的,即使数据库发生故障也不会对其有任何影响

Spring事务管理

Spring事务管理主要3个接口

  • 事务管理器-PlatformTransactionManager
    • getTransaction(TransactionDefinition):TransactionStatus
    • commit(TransactionStatus):void
    • rollback(TransactionStatus):void
  • 事务定义信息-TransactionDefinition
    • 定义事务的隔离级别、传播行为、是否超时、是否只读等
    • TransactionDefinition接口中的定义的常量以及方法 如图:
      Spring 事务管理
  • 事务具体运行状态-TransactionStatus
    • isNewTransaction():boolean
    • hasSavepoint():boolean
    • setRollbackOnly():void
    • isRollbackOnly():boolean
    • flush():void
    • isCompleted():boolean

事务隔离级别

  • 脏读
    • 一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的据被回滚,则读到的数据是无效的
  • 不可重复读
    • 在同一事务中,多次读取同一数据返回的结果不同
  • 幻读
    • 一个事务读取了几行记录后,另一个事务插入记录,再进行读取时,第一个事务发现多了之前没有的记录
  • 事务隔离级别如图:
    Spring 事务管理

事务的传播行为

  • Spring中提供的七种事务传播行为 如图:
    Spring 事务管理
  • 解决业务层方法之间相互调用中多个事务之间的顺序问题
  • TransactionDefinition.PROPAGATION_REQUIRED
    • 支持当前事务,如果不存在就新建一个
  • TransactionDefinition.PROPAGATION_REQUIRES_NEW
    • 如果有事务,挂起当前事务,创建一个新事务
  • TransactionDefinition.PROPAGATION_NESTED -如果当前事务存在,则嵌套事务执行

Spring声明式事务

  • 使用XML配置基于AspectJ tx/aop
    • 如图配置信息:
      Spring 事务管理
    • spring.xml配置代码
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    			<property name="dataSource" ref="dataSource"/>
    		</bean>
    		<!-- 配置事务通知 -->
    		<tx:advice id="txAdvice" transaction-manager="transactionManager">
    			<tx:attributes>
    				<tx:method name="search*" read-only="true"/>
    				<tx:method name="get*" read-only="true"/>
    				<tx:method name="create*" read-only="false"/>
    				<tx:method name="update*" read-only="false"/>
    				<tx:method name="delete*" read-only="false"/>
    				<tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
    			</tx:attributes>
    		</tx:advice>
    		<!-- 配置切面 -->
    		<aop:config>
    			<!-- 配置切入点 -->
    			<aop:pointcut id="txPointcut" expression="execution(* com.brh.p2p.admin.service.*.*(..))" />
    			<!-- 配置切面 -->
    			<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" />
    		</aop:config>```
    复制代码
  • 基于注解方式配置事务
    1. spring的配置文件中需要开启注解
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    		<property name="dataSource" ref="dataSource"/>
    	</bean>
    	<!-- 开启注解事务 -->
    	<tx:annotation-driven transaction-manager="transactionManager"/>```
    2. 在需要事务的类上添加注解如图:
    复制代码
Spring 事务管理
Spring 事务管理

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP经典实例

PHP经典实例

(美)斯克拉、(美)切贝特伯格 / 李松峰、秦绪文、李丽 / 中国电力出版社 / 2009-10 / 98.00元

PHP经典实例(第2版)能够为您节省宝贵的Web开发时间。有了这些针对真实问题的解决方案放在手边,大多数编程难题都会迎刃而解。《PHP经典实例(第2版)》将PHP的特性与经典实例丛书的独特形式组合到一起,足以帮您成功地构建跨浏览器的Web应用程序。在这个修订版中,您可以更加方便地找到各种编程问题的解决方案,《PHP经典实例(第2版)》中内容涵盖了:表单处理;Session管理;数据库交互;使用We......一起来看看 《PHP经典实例》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具