Spring事务整理

简介:

事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。
在企业级应用程序开发中,事务管理必不可少的技术,用来确保数据的完整性和一致性。
 

特性:(可以忽略)

统一的接口

PlatformTransactionManager : 事务管理器
TransactionDefinition : 事务的一些基础信息,如超时时间、隔离级别、传播属性等
TransactionStatus : 事务的一些状态信息,如是否是一个新的事务、是否已被标记为回滚
 

spring中的事务实现类

 

spring中事务的实现方式

1. 编程式的事务管理
    1)事务管理器:具体的事务管理实现类,jdbc
        org.springframework.jdbc.datasource.DataSourceTransactionManager
        需要注入:datasource
    2)事务管理的模板:
        org.springframework.transaction.support.TransactionTemplate
        需要注入:事务管理器
    3)在类中对模板进行使用 .execute()  
 
2. 使用XML配置声明式的事务管理(原始方式)
    1)事务管理器
    2)配置代理类:
        org.springframework.transaction.interceptor.TransactionProxyFactoryBean
 
 
3. 使用XML配置声明式的事务管理,基于tx/aop
        1)事务管理器
<!-- 配置事务的通知 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!-- 
				propagation	:事务传播行为
				isolation	:事务的隔离级别
				read-only	:只读
				rollback-for:发生哪些异常回滚
				no-rollback-for	:发生哪些异常不回滚
				timeout		:过期信息
			 -->
			<tx:method name="transfer" propagation="REQUIRED" />
		</tx:attributes>
	</tx:advice>
	
	<!-- 配置切面 -->
	<aop:config>
		<!-- 配置切入点 -->
		<aop:pointcut expression="execution(* com.zs.spring.demo3.AccountService+.*(..))" id="pointcut1"/>
		<!-- 配置切面 -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/>
	</aop:config>
 
 
4. 使用注解配置声明式事务
    1)事务管理器
    2)开启事务扫描
<tx:annotation-driven transaction-manager="transactionManager"/>
 
    3)添加 @Transactional 注解,定义属性
 

事务的属性:5个维度

这里写图片描述
传播行为
    当一个事务方法调用另一个事务方法的时候
       1)是否支持事务:
       2)使用谁的事务
 
隔离规则:
    针对可能存在的并发问题,选择设置什么样的行锁和表锁
从上到下,隔离级别越来越高,效率越来越低
 
回滚规则
    针对异常,设置哪些异常不回滚
 
是否只读
    只读情况下,数据库不接受修改,如果修改报错
org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [update account set money = money-? where name = ?]; Connection is read-only. Queries leading to data modification are not allowed; nested exception is java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed
 
事务超时
    如果超过设定的时间,直接回滚
 

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

posted @ 2017-09-13 17:35  鹿回头  阅读(134)  评论(0)    收藏  举报