spring事务管理

╰半夏微凉° 2022-03-22 05:09 427阅读 0赞

spring事务管理

      • 什么是事务:
        • 事务的特性:
      • Spring支持两种方式事务管理
        • 编程式的事务管理:
        • 声明式的事务管理:

更多文章欢迎访问个人博客 www.herobin.top

什么是事务:

事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败.(银行转账)

事务的特性:

原子性 一致性 隔离性 持久性

  • 原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生

  • 一致性:一致性指事务前后数据的完整性必须保持一致

  • 隔离性:隔离性指多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离

  • 持久性:持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响

Spring事务管理高层抽象主要包括3个接口

  • PlatformTransactionManager:事务管理器
  • TransactionDefinition:事务定义信息(隔离、传播、超时、只读)
  • TransactionStatus:事务具体运行状态

Spring为不同的持久化框架提供了不同PlatformTransactionManager接口实现

DataSourceTransactionManager:使用Spring JDBC或iBatis进行持久化数据时使用

HibernateTransactionManager:使用Hibernate3.0版本进行持久化数据时使用

Spring支持两种方式事务管理

  • 编程式的事务管理:在实际应用中很少使用,通过TransactionTemplate手动管理事务
  • 通过XML配置声明式事务:开发中推荐使用(代码侵入性最小)
    Spring的声明式事务是通过AOP实现的

编程式的事务管理:

配置文件编写:

  1. <!-- 配置事务管理器 -->
  2. <bean id = "transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionmanager">
  3. <property name = "dataSource" ref = "dataSource"/>
  4. </bean>
  5. <!-- 配置事务管理的模板:Spring为了简化事务管理的代码而提供的类 -->
  6. <bean id = "transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
  7. <property name = "transactionManager" ref = "transactionManager"/>
  8. </bean>

代码文件编写:

  1. public void transfer(final String out, final String in, final Double money){
  2. transactionTemplate.execute(new TransactionCallbackWithoutResult){
  3. @override
  4. protected void doInTransactionWithoutResult(TransactionStatus transactionStatus){
  5. accountDao.outMoney(out, money);
  6. int i = i/0;//用于异常时检测事务完整性
  7. accountDao.inMoney(in, money);
  8. }
  9. }
  10. }

声明式的事务管理:

声明式事务管理方式一:TransactionProxyFactoryBean (不常用)

  1. <!-- 配置事务管理器: -->
  2. <bean id = "transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionmanager">
  3. <property name = "dataSource" ref = "dataSource"/>
  4. </bean>
  5. <!-- 配置业务层的代理: -->
  6. <bean id = "acountServiceProxy" class = "org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  7. <!-- 配置目标对象 -->
  8. <property name = "target" ref = "accountService"/>
  9. <!-- 注入事务管理器 -->
  10. <property name = "transactionManager" ref = "transactionManager"/>
  11. <!-- 注入事务属性 -->
  12. <property name = "transactionAttributes">
  13. <props>
  14. <!-- prop的格式:
  15. * PROPAGATION : 事务的传播行为
  16. * ISOLATION : 事务的隔离级别
  17. * readOnly : 只读(不可以进行修改,插入,删除)
  18. * -Exception : 发生哪些异常回滚事务
  19. * +Exception: 发生哪些异常不回滚
  20. -->
  21. <prop key="transfer">PROPAGATION_REQUIRED,redaOnly,...</prop>
  22. </props>
  23. </property>
  24. </bean>

声明式事务管理方式二:基于AspectJ使用xml方式 基于tx/aop

  1. <bean id = "transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionmanager">
  2. <property name = "dataSource" ref = "dataSource"/>
  3. </bean>
  4. <tx:advice id = "txAdvice" transaction-manager="transactionManager">
  5. <tx:attributes>
  6. <tx:method name="transfer" propagation="REQUIRED"/>
  7. </tx:attributes>
  8. </tx:advice>
  9. <aop:config>
  10. <aop:pointcut expression="execution(* cn.service.*Service.*(..))" id="serviceMethod"/>
  11. <aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice"/>
  12. </aop:config>

声明式事务管理方式三:基于注解的事务管理

配置文件编写:

  1. <!-- 配置事务管理器 -->
  2. <bean id = "transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionmanager">
  3. <property name = "dataSource" ref = "dataSource"/>
  4. </bean>
  5. <!-- 开启注解事务 -->
  6. <tx:annotation-driven transaction-manager="transactionManager"/>
  7. 使用的时候在需要事务的地方(通常是service层)加注解@Transactional

发表评论

表情:
评论列表 (有 0 条评论,427人围观)

还没有评论,来说两句吧...

相关阅读

    相关 spring 事务管理

    1、什么是事务     我们在开发时,会对数据进行持久化操作,如存入数据库中。当我们操作数据库中的数据,后续可能会发生错误,抛出异常,前面对数据库的操作就会不可靠,在这种

    相关 Spring事务管理

    事务 事务:是指逻辑上的一组操作,这组操作要么全部成功,要么全部失败。 事务的特性: 原子性:原子性是指事务是一个不可 分割的工作单位,事务中的操作要么都发生

    相关 Spring事务管理

    事务的基本原理         Spring事务的本质其实就是数据库对事务的支持,使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务

    相关 Spring事务管理

    1. 数据库知识点 1.1 概念 数据库管理系统一般采用重执行日志保证原子性,一致性和持久性 和java程序采用对象锁进行线程同步类似,数据库管理系统采

    相关 Spring事务管理

    Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作。今天一起学习一下Spring的事务管理。Spring的事务管理分为声明式跟编程式,声明式就是在Spring

    相关 Spring事务管理

    Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作。今天一起学习一下Spring的事务管理。Spring的事务管理分为声明式跟编程式,声明式就是在Spring

    相关 Spring事务管理

    Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作。今天一起学习一下Spring的事务管理。Spring的事务管理分为声明式跟编程式,声明式就是在Spring