ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring中声明式事务

2021-04-25 21:02:01  阅读:132  来源: 互联网

标签:事务 tx Spring propagation 当前 执行 声明


事务

事物在开发中十分重要,为了确保项目的稳定,解耦和维护,事物的管理不能缺少

事物拥有四个属性:ACID

  • A(atomicity):原子性:一个原子事务要么完整执行,要么干脆不执行。
  • C(consistency):一致性:一致性代表了底层数据存储的完整性。
  • I(isolation) :隔离性: 意味着事务必须在不干扰其他进程或事务的前提下独立执行
  • D(durability):持久性:表示在某个事务的执行过程中,对数据所作的所有改动都必须在事务成功结束前保存至某种物理存储设备。

如果我们在执行代码对数据库进行操作时,先执行删除语句,后执行添加语句,可添加语句报错,但删除语句还是会执行,这就违反了事务的原子性。

Spring就拥有对事物管理的能力

Spring中的事务管理

要想使用Spring的事务管理需要在配置页面导入对应的头文件

xmlns:tx="http://www.springframework.org/schema/tx"

http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">

设置JDBC事务:

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

配置相对应方法和对应事务:

<tx:advice id="advice_test" transaction-manager="transactionManager">
   <tx:attributes>
       <!--配置哪些方法使用什么样的事务,配置事务的传播特性-->
       <!-- 方法名前缀         事务传播类型-->
       <tx:method name="add" propagation="REQUIRED"/>
       <tx:method name="delete" propagation="REQUIRED"/>
       <tx:method name="*" propagation="REQUIRED"/>
       <!-- *代表所有方法-->
   </tx:attributes>
</tx:advice>

Spring中事务的传播类型有许多,其中REQUIRED是最常使用的,

  • propagation_requierd:如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择。
  • propagation_supports:支持当前事务,如果没有当前事务,就以非事务方法执行。
  • propagation_mandatory:使用当前事务,如果没有当前事务,就抛出异常。
  • propagation_required_new:新建事务,如果当前存在事务,把当前事务挂起。
  • propagation_not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
  • propagation_never:以非事务方式执行操作,如果当前事务存在则抛出异常。
  • propagation_nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作

我们可以以AOP(切面编程)的方式把事务配置织入到指定的包与类中,让事务管理在指定的地方生效


<!--配置aop织入事务-->
<aop:config>
   <aop:pointcut id="pointcut_test" expression="execution(* com.nicht.mapper.*.*(..))"/>
   <aop:advisor advice-ref="advice_teste" pointcut-ref="pointcut_test"/>
</aop:config>

标签:事务,tx,Spring,propagation,当前,执行,声明
来源: https://blog.csdn.net/a1369791292/article/details/116134045

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有