SpringAOP事务配置语法及实现过程详解

 更新时间:2020年06月19日 15:09:13   作者:64Byte  
这篇文章主要介绍了SpringAOP事务配置语法及实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

配置事务: 使用的tx前缀的标签, 导入tx的命名空间

配置事务管理器 , 把事务管理器交给Spring管理:

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <!-- 注入DataSource -->
    <property name="dataSource" ref="dataSource"/>
</bean>

事务的策略

transaction-manager: 事务增强基于那个事务管理器, 默认值: transactionManager(bean的id)

如果事务管理器的id为transactionManager, 在tx:advice标签中不需要添加transaction-manager属性

<tx:advice id="txAdvice" transaction-manager="txManager">
<!-- 声明事务的规则 : 针对业务层的不同的方法,采用不同的规则-->
  <tx:attributes>
      <tx:method name="find*" read-only="true" propagation="SUPPORTS" />
     <tx:method name="query*" read-only="true" propagation="SUPPORTS"/>
     <tx:method name="get*" read-only="true" propagation="SUPPORTS"/>
     <tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
     <tx:method name="del*" propagation="REQUIRED" rollback-for="java.lang.Exception" timeout="2"/>
     <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
     <tx:method name="*" propagation="REQUIRED"/>
  </tx:attributes>
</tx:advice>

事务规则的语法:

name: 表示业务层的方法名

read-only: 只读, true 查询中使用这个属性, 默认值: false

propagation: 事务传播机制:

*** REQUIRED:默认值,表示如果存在一个事务,则支持当前事务,如果当前没有事务,则开启一个新的事务. 增删改
*** SUPPORTS:表示如果存在一个事务,则支持当前事务,如果当前没有事务,则按非事务方式执行, 查询
MANDATORY:表示如果存在一个事务,则支持当前事务,如果当前没有事务,则抛出异常
REQUIRES_NEW:表示总是开启一个新的事务,如果当前有一个事务,则将当前事务挂起,开启新事物执行方法.
NOT_SUPPORTED:表示总是以非事务方式执行.如果一个事务已经存在,则将这个存在的事务挂起,然后执行方法.
NEVER:表示总是以非事务方式执行.如果当前存在一个活动的事务,则抛出异常
NESTED:表示如果当前存在一个活动的事务,则创建一个事务作为当前事务的嵌套事务运行,如果没有当前事务,该取值与REQUIRED相同.

timeout: 超时, -1 永不超时, 默认值, 正整数, 单位秒

rollback-for="异常类型", 针对哪一种异常类型进行回滚, ,默认值:RuntimeException

no-rollback-for="异常类型", 不对哪一种异常类型进行回滚

isolation: 事务隔离级别: 数据库来决定

DEFAULT:默认值,表示使用数据库默认的事务隔离级别
READ_UNCOMMITTED:读未提交, 读取到未提交的数据, 所有的数据库都不采用
READ_COMMITTED:读已提交 oracle
REPEATABLE_READ: 可重复读 mysql
SERIALIZABLE: 串行读 安全性最高, 效率最低

timeout: 从执行业务方法开始,到执行完sql语句之间的时候

事务的织入 (把这个事务的通知对那些类的那些方法进行增强)

<!-- 事务的织入 ,把这个事务的通知对那些类的那些方法进行增强-->
  <aop:config>
    <!-- 切入点-->
    <aop:pointcut expression="execution(* spring07.service..*.*(..))" id="pointcut1"/>
    <!-- 织入 
      advice-ref: 通知类的bean
      pointcut-ref: 切入点
    -->
    <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/>
  </aop:config>

脏读 :一个事务读到了另一个事务的未提交的数据

不可重复读 :一个事务读到了另一个事务已经提交的 update 的数据导致多次查询结果不一致

幻读 :一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java类访问权限与成员访问权限解析

    java类访问权限与成员访问权限解析

    这篇文章主要针对java类访问权限与成员访问权限进行解析,对类与成员访问权限进行验证,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • Java中处理金额计算之使用Long还是BigDecimal详解

    Java中处理金额计算之使用Long还是BigDecimal详解

    在Java后端开发中处理与钱有关的业务时,确保金额计算的准确性和避免错误非常重要,这篇文章主要给大家介绍了关于Java中处理金额计算之使用Long还是BigDecimal的相关资料,需要的朋友可以参考下
    2024-07-07
  • Java中volatile 的作用

    Java中volatile 的作用

    这篇文章主要介绍了Java中volatile 的作用,volatile是Java并发编程的重要组成部分,主要作用是保证内存的可见性和禁止指令重排序,下文更多对volatile作用的介绍,需要的小伙伴可以参考一下
    2022-05-05
  • Java编程中ArrayList源码分析

    Java编程中ArrayList源码分析

    这篇文章主要介绍了Java编程中ArrayList源码分析,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Springboot使用RestTemplate调用第三方接口的操作代码

    Springboot使用RestTemplate调用第三方接口的操作代码

    这篇文章主要介绍了Springboot使用RestTemplate调用第三方接口,我只演示了最常使用的请求方式get、post的简单使用方法,当然RestTemplate的功能还有很多,感兴趣的朋友可以参考RestTemplate源码
    2022-12-12
  • java中重写equals()方法的同时要重写hashcode()方法(详解)

    java中重写equals()方法的同时要重写hashcode()方法(详解)

    下面小编就为大家带来一篇java中重写equals()方法的同时要重写hashcode()方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Java利用EasyExcel读取写入Excel详情

    Java利用EasyExcel读取写入Excel详情

    这篇文章主要介绍了Java利用EasyExcel读取写入Excel详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Java List 用法详解及实例分析

    Java List 用法详解及实例分析

    这篇文章主要介绍了Java List 用法详解及实例分析的相关资料,需要的朋友可以参考下
    2017-07-07
  • 使用JPA进行CriteriaQuery进行查询的注意事项

    使用JPA进行CriteriaQuery进行查询的注意事项

    这篇文章主要介绍了使用JPA进行CriteriaQuery进行查询的注意事项,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • SpringBoot使用YML文件进行多环境配置的三种方法

    SpringBoot使用YML文件进行多环境配置的三种方法

    SpringBoot通过其灵活的配置机制,使得在不同环境中管理应用设置变得简单,尤其是使用YAML文件进行配置,它提供了一种简洁、易读的方式来定义应用的配置,本文将探讨在SpringBoot中使用YAML文件进行多环境配置的三种方法,需要的朋友可以参考下
    2024-04-04

最新评论