博客
关于我
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/

    你可能感兴趣的文章
    Netty相关
    查看>>
    Network Dissection:Quantifying Interpretability of Deep Visual Representations(深层视觉表征的量化解释)
    查看>>
    Network Sniffer and Connection Analyzer
    查看>>
    NFS共享文件系统搭建
    查看>>
    ng 指令的自定义、使用
    查看>>
    nginx + etcd 动态负载均衡实践(二)—— 组件安装
    查看>>
    Nginx + uWSGI + Flask + Vhost
    查看>>
    Nginx Location配置总结
    查看>>
    Nginx 动静分离与负载均衡的实现
    查看>>
    Nginx 反向代理解决跨域问题
    查看>>
    Nginx 反向代理配置去除前缀
    查看>>
    nginx 后端获取真实ip
    查看>>
    Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
    查看>>
    nginx 常用配置记录
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    Nginx 的 proxy_pass 使用简介
    查看>>
    Nginx 的配置文件中的 keepalive 介绍
    查看>>
    nginx 配置 单页面应用的解决方案
    查看>>
    nginx 配置~~~本身就是一个静态资源的服务器
    查看>>
    Nginx下配置codeigniter框架方法
    查看>>