1 什么是事务?
* 事务是逻辑上的一组操作,要么都执行,要么都不执行.
2 特点
* 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
* 一致性: 执行事务前后,数据保持一致;
* 隔离性: 并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事务之间数据库是独立的;
* 持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
3 spring xml配置事务管理
引入约束:
步骤:
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的事务管理。一次配置,将满足下项目的需求。