事务:事务是数据库操作的最小单元,也就是事务中执行的操作要么一起成功,要么一起回滚,因为他是最小的操作单元。
事务的特性:原子性、一致性、隔离性、持续性。
事务的隔离级别:(1)Serializable(序列化) (2)Repeatable read(可重复读) (3)3.Read Committed(已提交读) (4)Read Uncommitted(未提交读),具体可参考https://www.huaweicloud.com/zhishi/edu-arc-sjkzs37.html
1、在spring中声明式事务的配置:
(1)在xml上配置事务管理器及开启事务
<!--配置事务管理器TransationManager的bean对象-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--开启基于注解的事务管理器的配置-->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
(2)如何使用?
@Transactional注解可以开启事务。
注解中的参数:
/**
* @Transactional(参数)
* propagation:传播特性
* isolation:隔离级别:四种隔离级别,会引发不同的数据错乱问题
* timeout:超时时间,限制事务提交的时间,超时则回滚
* readonly:只读事务,如果配置了只读事务,那么在事务运行期间,不允许对数据进行修改,否则抛出异常
*
* 不回滚,可用来设置指定异常时不回滚
* noRollBackfor:异常类名称
* noRollbackForClassName = 异常类包及名称,String类型
* 回滚,设置指定异常回滚
* rollBackfor:异常类名称
* rollbackForClassName = 异常类包及名称,String类型
*/
2、事务的传播特性:指一个事务方法被另一个事务方法调用时
(1)REQURED:默认是REQURED,以外层事务为准,里层事务不生效,外层事务决定是否回滚(可用两个方法测试)
(2)REQURES_NEW:若里层有事务,先将外层事务挂起,先执行里层事务(可用两个方法测试)
(3)SUPPORTS:若外部有事务,里层也有事务,则由外层事务决定是否回滚,也就是这个属性设置后里层事务就不存在事务了,若外层无事务,里层也不会回滚
(4)NOT_SUPPORTED:若外层有事务,里层也有事务,外层或里层事务有异常,都不会回滚
(5)NEVER:若外层有事务,里层也有事务,外层或里层事务有异常,则抛出异常
(6)MANDATORY:(mandatory)当前方法必须运行在事务内部,如果没有运行的事务,则抛出异常
(7)NESTED(nested):里层与外层都有事务,里层跟NEQUEST_NEW一样,也会生成一个新事务,但里层事务与外层事务相关,若外层事务抛出异常需要回滚,则里层事务也需要回滚。
***自己方法调用不存在事务
3、事务如何在xml上配置
<!--事务的配置-->
<!--声明一个事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<aop:config>
<aop:pointcut id="txPointcut" expression="execution(* com.csh.service.*.*(..))"/>
<!--事务-->
<aop:advisor advice-ref="myAdvice" pointcut-ref="txPointcut"></aop:advisor>
</aop:config>
<!--配置在哪些方法上添加事务,*代表全部方法-->
<tx:advice transaction-manager="transactionManager" id="myAdvice">
<tx:attributes>
<tx:method name="insert" propagation="REQUIRED"/>
<tx:method name="*" propagation="REQUIRED"></tx:method>
</tx:attributes>
</tx:advice>