博客
关于我
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实现sum of geometric progression几何级数之和算法(附完整源码)
    查看>>
    Objective-C实现sum of subset子集总和算法(附完整源码)
    查看>>
    Objective-C实现SVM支持向量机算法(附完整源码)
    查看>>
    Objective-C实现sylvester西尔维斯特方程算法(附完整源码)
    查看>>
    Objective-C实现tabu search禁忌搜索算法(附完整源码)
    查看>>
    Objective-C实现tanh函数功能(附完整源码)
    查看>>
    Objective-C实现TCP Server 多线程同时连接多个客户端(附完整源码)
    查看>>
    Objective-C实现TCP拥塞控制(附完整源码)
    查看>>
    Objective-C实现Tenengrad梯度函数(附完整源码)
    查看>>
    Objective-C实现ternary search三元搜索算法(附完整源码)
    查看>>
    Objective-C实现TernarySearch三分查找算法(附完整源码)
    查看>>
    Objective-C实现The Game of Life 生命游戏算法(附完整源码)
    查看>>
    Objective-C实现tim sort排序算法(附完整源码)
    查看>>
    Objective-C实现Timsort算法(附完整源码)
    查看>>
    Objective-C实现TOPK算法(附完整源码)
    查看>>
    Objective-C实现topologicalSort拓扑排序算法(附完整源码)
    查看>>
    Objective-C实现trapezoidal rule梯形法则算法(附完整源码)
    查看>>
    Objective-C实现Trapping Rain Water捕获雨水问题算法(附完整源码)
    查看>>
    Objective-C实现Travelling Salesman算法(附完整源码)
    查看>>
    Objective-C实现ugly numbers丑数算法(附完整源码)
    查看>>