- 逻辑上的一组操作,这组操作要么全部成功,要么全部失败。
- 事务的特性:
- 原子性
- 事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生
- 一致性
- 执行事务前后数据的完整性必须保持一致
- 隔离性
- 多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据相互隔离
- 持久性
- 事务一旦提交完成,数据修改是永久的,即使数据库发生故障也不会对其有任何影响
- 原子性
Spring事务管理
Spring事务管理主要3个接口
- 事务管理器-PlatformTransactionManager
- getTransaction(TransactionDefinition):TransactionStatus
- commit(TransactionStatus):void
- rollback(TransactionStatus):void
- 事务定义信息-TransactionDefinition
- 定义事务的隔离级别、传播行为、是否超时、是否只读等
- TransactionDefinition接口中的定义的常量以及方法 如图:
- 事务具体运行状态-TransactionStatus
- isNewTransaction():boolean
- hasSavepoint():boolean
- setRollbackOnly():void
- isRollbackOnly():boolean
- flush():void
- isCompleted():boolean
事务隔离级别
- 脏读
- 一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的据被回滚,则读到的数据是无效的
- 不可重复读
- 在同一事务中,多次读取同一数据返回的结果不同
- 幻读
- 一个事务读取了几行记录后,另一个事务插入记录,再进行读取时,第一个事务发现多了之前没有的记录
- 事务隔离级别如图:
事务的传播行为
- Spring中提供的七种事务传播行为 如图:
- 解决业务层方法之间相互调用中多个事务之间的顺序问题
- TransactionDefinition.PROPAGATION_REQUIRED
- 支持当前事务,如果不存在就新建一个
- TransactionDefinition.PROPAGATION_REQUIRES_NEW
- 如果有事务,挂起当前事务,创建一个新事务
- TransactionDefinition.PROPAGATION_NESTED -如果当前事务存在,则嵌套事务执行
Spring声明式事务
- 使用XML配置基于AspectJ tx/aop
- 如图配置信息:
- 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>``` 复制代码
- 基于注解方式配置事务
- spring的配置文件中需要开启注解
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 开启注解事务 --> <tx:annotation-driven transaction-manager="transactionManager"/>``` 2. 在需要事务的类上添加注解如图: 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 在云中管理事务,第 1 部分: 事务基础和分布式事务
- spring事务管理源码分析(一)配置和事务增强代理的生成流程
- 关系型数据库中的事务管理详解:并发控制与事务日志
- Hibernate事务管理
- Spring系列-事务管理
- Spring 系列:事务管理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。