【关于Spring那些事】——Spring声明式事务管理

【关于Spring那些事】——Spring声明式事务管理,第1张

目录
  • Spring事务管理
    • 1.事务管理级别
    • 2.事务传播机制
    • 3.声明式事务管理
      • 3.1基于XML方式的配置
      • 3.2 基于注解方式的配置

Spring事务管理 1.事务管理级别

Spring的事务隔离级别有四个:READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ和SERIALIZABLE。

  • READ_UNCOMMITTED:允许一个事务读取到另一个事务未提交的数据
  • READ_COMMITTED:一个事务只能读取到已经提交后的数据
  • REPEATABLE_READ:一个事务可以多次从数据库读取某条记录,而且多次读取的那条记录都是一致的,除非事务本身发生改变
  • SERIALIZABLE:不允许读取、修改
2.事务传播机制

spring事务的传播机制有七种:REQUIRED、REQUIRES_NEW、NESTED、SUPPORTS、NOT_SUPPORTED、MANDATORY和NEVER。

  • REQUIRED:如果上层有事务则加入该事务,没有就创建新事务
  • SUPPORTS:如果上层有事务则加入该事务,没有就以非事务方式执行
  • REQUIRES_NEW:如果上层有事务则挂起当前事务,没有就创建新事务
  • NOT_SUPPORTED:如果上层有事务则挂起当前事务,没有就以非事务方式执行
  • NEVER:如果上层有事务则抛出异常,没有就以非事务方式执行
  • MANDATORY:如果上层有事务则加入该事务,没有就抛出异常
  • NESTED:如果上层有事务则嵌套该事务执行,没有就创建新事务
3.声明式事务管理 3.1基于XML方式的配置

3.1.1 将Spring提供的事务管理配置交给Spring容器

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

3.1.2 通过Spring jdbc提供的tx标签,声明事务管理策略

  • 头文件中添加tx的约束条件和命名空间
xmlns:tx="http://www.springframework.org/schema/tx"

http://www.springframework.org/schema/tx
https://www.springframework.org/schema/tx/spring-tx.xsd">
<tx:advice id="txAdvice" transaction-manager="transactionManager">
   <tx:attributes>
        <tx:method name="insert*" isolation="REPEATABLE_READ" propagation="REQUIRED"/>
        <tx:method name="select*" isolation="REPEATABLE_READ" propagation="SUPPORTS"/>
    tx:attributes>
tx:advice>

3.1.3 将事务管理策略以AOP配置应用于service *** 作方法

<aop:config>
   <aop:pointcut id="crud" expression="execution(* com.gyh.service.*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="crud"/>
aop:config>
3.2 基于注解方式的配置

3.2.1 配置事务管理类并交给Spring容器

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

3.2.2 声明使用注解方式配置

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

3.2.3 在需要Spring进行事务管理的方法上添加注解

@Transactional   
public List<User> listUsers() {
    return userDao.selectUser();
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/719577.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存