简介:
事务是
一系列的动做,它们综合在一块儿才是一个完整的工做单元,这些动做必须所有完成,若是有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过同样。
在企业级应用程序开发中,事务管理必不可少的技术,用来确保数据的完整性和一致性。
特性:(能够忽略)
统一的接口
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