Spring 中的事务管理

1. 事务的四个关键属性(ACID)

  • 原子性(atomicity): 事务是一个原子操作, 由一系列动作组成. 事务的原子性确保动作要么全部完成要么完全不起作用.
  • 一致性(consistency): 一旦所有事务动作完成, 事务就被提交. 数据和资源就处于一种满足业务规则的一致性状态中.
  • 隔离性(isolation): 可能有许多事务会同时处理相同的数据, 因此每个事物都应该与其他事务隔离开来, 防止数据损坏.
  • 持久性(durability): 一旦事务完成, 无论发生什么系统错误, 它的结果都不应该受到影响. 通常情况下, 事务的结果被写到持久化存储器中.

2. Spring 中的事务管理器的不同实现

3. Spring 的声明式事务管理

3.1 使用配置文件进行事务的声明式管理

    <!-- 声明式事务管理器 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="pooledDataSource" />
    </bean>
 
<!-- 配置事物增强,如何控制 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!-- 所有以add开头的方法都是事物方法 -->
            <tx:method name="add*" 
                       <!-- 事务传播行为 -->
                       propagation="REQUIRES_NEW"
                      <!--  事务隔离级别-->
                      isolation="READ_COMMITED"   
                      <!---事务回滚属性-->
                      rollback-for="java.lang.IOEXception,java.sql.SQLException"                     
                      no-rollback-for="java.lang.ArithmeticException"/>
            
            <!-- 以get开始的所有方法 -->
            <tx:method name="get*" 
                       <!-- 只读事务属性-->
                       read-only="true"/>
        </tx:attributes>
    </tx:advice>

    <aop:config>
        <!-- aop切入点表达式 -->
        <aop:pointcut expression="execution(* com.supreme.service..*(..))"
            id="txPoint" />
        <!-- 配置事务增强 --> 
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint" />
    </aop:config>

3.2 使用@Transactional注解声明式的管理事务

    <!-- 声明式事务管理器 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="pooledDataSource" />
    </bean>
    
    <tx:annotation-driven transaction-manager="transactionManager"/>

3.2.1 @Transactional注解使用细节

3.2.2 @Transactional注解使用示例

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 相信 Java 程序员一定听过大名鼎鼎的 Spring 框架,Spring 框架的低侵入性,模块间的解耦,DI 机...
    点融黑帮阅读 3,989评论 0 11
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,224评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,267评论 19 139
  • 本文采用CC BY-NC-SA 2.5 CN协议授权。 安装qBittorrent-nox apt-get upd...
    潘达仔阅读 15,770评论 0 1
  • 别太为难自己,有些人,不值得你掏心掏肺。有些事,无须一直铭刻于记忆。别等到无能为力,才选择顺其自然。莫因为心无所恃...
    窸窣声阅读 1,504评论 2 0

友情链接更多精彩内容