spring学习笔记 ----- 事务管理

1  什么是事务?

    * 事务是逻辑上的一组操作,要么都执行,要么都不执行.

2  特点

    * 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;

    * 一致性: 执行事务前后,数据保持一致;

    * 隔离性: 并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事务之间数据库是独立的;

    * 持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

3 spring xml配置事务管理

    引入约束:

spring学习笔记 ----- 事务管理

    步骤:

    1、配置事务管理器
    2、配置事物的通知(导入事务的约束)
    3、配置aop中的通用切入点表达式
    4、建立事务通知和切入点表达式对应的关系
    5、配置事务的属性(tx:advice 内部)

    * 事务的属性

       isolation: 用于指定事务的隔离级别,默认值是DEFAULT,表示使用数据库的默认隔离级别
       propagation:用于指定事务的传播行为。默认值是REQUIRED,表示一定会有事务,增删改的选择。查询方法可以选择SUPPORTS
       read-only: 用于指定事务是否只读。只有查询方法才能设置为true。默认值是false,表示读写。
       timeout: 用于指定事务的超时时间,默认值是-1,表示永不超时。如果指定了数值,以秒为单位。
       rollback-for: 用于指定一个异常,当产生该异常时,事务回滚,产生其他异常时,事务不回滚。没有默认值。表示任何异常都回滚。
       no-rollback-for用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时事务回滚。没有默认值,表示任何异常都回滚。

<bean id="transactionmanager" class="org.sprigframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"></property>

</bean>

<!-- 配置事务的通知 -->
// id 给事务通知起一个唯一标识
// transaction-manager 给事务通知一个事务管理引用
<tx:advice id="txAdvice" transaction-manager="transactionmanager">

	<!-- 配置事务的属性 -->
	<tx:attributes>
		<tx:method name="*" propagation="REQUIRED" read-only="false" />
		//优先级更改
		<tx:method name="find*" propagation="SUPPORT" read-only="true">
		</tx:method>
	</tx:attributes>>
</tx:advice>

<!--  -->
<aop:config>
	<!-- 配置切入点表达式 -->
	<aop:pointcut id="pl" expression="execution(* com.spring.demo.impl.*.*(..))"> </aop:pointcut>
	<!-- 建立事务通知和切入点表达式对应的关系 -->
	<aop:advisor advice-ref="txAdvice" pointcut-ref="pl"></aop:advisor> 
</aop:config>

基于注解的方式步骤:

1、配置事务管理器
2、开启spring对注解事务的支持
3、在需要事务支持的地方使用Transactional

<tx:annotation-driven transaction-manager="transactionmanager"></tx:annotation-driven>

注意:实际开发中,我们常用xml配置方式来进行sprig的事务管理。一次配置,将满足下项目的需求。