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;">java

相关文章
相关标签/搜索