博客
关于我
spring控制事务:声明式事务(XML)事务的传播行为
阅读量:322 次
发布时间:2019-03-03

本文共 2005 字,大约阅读时间需要 6 分钟。

Spring声明式事务(XML)配置与应用

基本概念与配置

Spring框架提供了基于XML的声明式事务管理,这种方式能够简化事务管理代码,提升开发效率。要使用声明式事务,需要配置相应的XML标签,并合理设置事务管理器和相关属性。

核心配置

  • 导入命名空间

    在使用 <tx> 标签时,需要在XML的开头声明命名空间:

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

    同时,确保引入了相关的XSD文件:

    http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd
  • 定义事务管理器

    将事务管理器交给IOC容器管理。以下是一个常见的实现类:

    这将允许Spring根据数据源(dataSource)管理事务。

  • 事务通知配置

    使用 <tx:advice> 标签定义事务通知类,通常用于AOP(面向切面编程)中。以下是一个示例:

    这里的 <tx:method> 标签用于配置具体的方法属性,如名称、读写属性等。

    事务传播行为

    事务传播行为决定了事务如何在多个资源(如数据库、外部服务等)之间传播。Spring支持七种事务传播行为,常见的包括:

  • REQUIRED:如果当前事务已经存在,则参与其中;否则新建一个。
  • SUPPORTS:如果当前事务存在,则参与;否则不影响。
  • ALWAYS: 总是新建一个独立的事务。
  • NEVER: 不参与任何现有的事务。
  • NOT: 总是参与,但不影响现有事务。
  • NEW: 总是新建一个独立的事务。
  • EXTERNAL: 仅参与外部事务,不影响内部资源。
  • 模板应用

    在Spring的AOP配置中使用事务通知类:

    这样,定义的txAdvice将被应用于所有匹配的切入点,确保所有相关的数据库操作都被包裹在一个事务中。

    实际案例:转账事务管理

    数据模型

    假设有两个数据库表 account,用于存储用户账户信息。转账业务需要更新两个账户的金额。

    业务逻辑

    在业务层实现转账时,应使用Spring的事务管理器来控制数据库操作的原子性。以下是一个示例:

    @Overridepublic void transferMoneyAtoB(String aName, String bName, Integer money) {    Account aAccount = accountDao.findAccountByName(aName);    Account bAccount = accountDao.findAccountByName(bName);    aAccount.setMoney(aAccount.getMoney() - money);    bAccount.setMoney(bAccount.getMoney() + money);    // 使用Spring事务管理器配置事务    PlatformTransactionManager ptm = new DataSourceTransactionManager(dataSource);    TransactionDefinition td = new DefaultTransactionDefinition();    TransactionStatus ts = ptm.getTransaction(td);    try {        accountDao.transferMoney(aAccount);        accountDao.transferMoney(bAccount);        ptm.commit(ts);    } catch (Exception e) {        ptm.rollback(ts);        throw new RuntimeException("转账失败:" + e.getMessage());    }}

    测试与验证

    通过测试转账功能,可以观察数据库中的数据变化。例如,转账100元后,小付的账户余额应减少100元,小花的账户余额应增加100元。

    事务传播行为示例

    在实际应用中,确保事务传播行为设置正确。例如,外部服务调用的事务传播行为应设置为 REQUIRED,以保证所有操作的原子性和一致性。

    总结

    通过以上配置和实现,能够在Spring框架中使用XML声明式事务管理数据库操作,确保事务的原子性、隔离性和持久性。事务传播行为的合理配置能够提升系统的扩展性和可维护性。

    转载地址:http://kqsm.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现Miller-Rabin素性测试程序(附完整源码)
    查看>>
    Objective-C实现Miller-Rabin素性测试程序(附完整源码)
    查看>>
    Objective-C实现MinhashLSH算法(附完整源码)
    查看>>
    Objective-C实现MinHeap最小堆算法(附完整源码)
    查看>>
    Objective-C实现multilayer perceptron classifier多层感知器分类器算法(附完整源码)
    查看>>
    Objective-C实现multiplesThreeAndFive三或五倍数的算法 (附完整源码)
    查看>>
    Objective-C实现n body simulationn体模拟算法(附完整源码)
    查看>>
    Objective-C实现naive string search字符串搜索算法(附完整源码)
    查看>>
    Objective-C实现natural sort自然排序算法(附完整源码)
    查看>>
    Objective-C实现nested brackets嵌套括号算法(附完整源码)
    查看>>
    Objective-C实现nevilles method多项式插值算法(附完整源码)
    查看>>
    Objective-C实现newtons second law of motion牛顿第二运动定律算法(附完整源码)
    查看>>
    Objective-C实现newton_raphson牛顿拉夫森算法(附完整源码)
    查看>>
    Objective-C实现NLP中文分词(附完整源码)
    查看>>
    Objective-C实现NLP中文分词(附完整源码)
    查看>>
    Objective-C实现not gate非门算法(附完整源码)
    查看>>
    Objective-C实现number of digits解字符数算法(附完整源码)
    查看>>
    Objective-C实现NumberOfIslands岛屿的个数算法(附完整源码)
    查看>>
    Objective-C实现n皇后问题算法(附完整源码)
    查看>>
    Objective-C实现O(E + V) 中找到 0-1-graph 中的最短路径算法(附完整源码)
    查看>>