数据库事务管理

事务基本概念

《Transaction 那点事儿》这篇文章通俗易懂的讲解了事务的基本概念、事务特性、引发的问题、JDBC事务解决方案、Spring解决方案,等。

文章主要内容思维导图

Spring + MyBatis事务配置

《spring+mybatis事务配置》这篇文章讲解了Spring实现事务管理的两种配置方式:

  • 声明式事务管理配置
<!-- 1. 配置事务管理 -->  
<bean name="transactionManager"
  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 2. 事务相关控制配置:例如配置事务的传播机制 -->
<tx:advice id="iccardTxAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="delete*" propagation="REQUIRED" read-only="false"
              rollback-for="java.lang.Exception"
              no-rollback-for="java.lang.RuntimeException"/>
        <tx:method name="insert*" propagation="REQUIRED" read-only="false"
              rollback-for="java.lang.RuntimeException" />
        <tx:method name="add*" propagation="REQUIRED" read-only="false"
              rollback-for="java.lang.RuntimeException" />
        <tx:method name="create*" propagation="REQUIRED" read-only="false"
              rollback-for="java.lang.RuntimeException" />
        <tx:method name="update*" propagation="REQUIRED" read-only="false"
              rollback-for="java.lang.Exception" />

        <tx:method name="find*" propagation="SUPPORTS" />
        <tx:method name="get*" propagation="SUPPORTS" />
        <tx:method name="select*" propagation="SUPPORTS" />
        <tx:method name="query*" propagation="SUPPORTS" />
    </tx:attributes>
</tx:advice>
<!-- 3. 把事务控制在service层 -->
<aop:config>
    <aop:pointcut id="iccardTerm"
        expression="execution(public * com.shfft.iccardterm.service.*.*(..))" />
    <aop:advisor pointcut-ref="iccardTerm" advice-ref="iccardTxAdvice" />
</aop:config>
  • 注解式事务管理配置
<!-- 1. 定义事务管理器 -->
<bean id="transactionManager"
  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    
    <property name="dataSource" ref="dataSource" />
</bean>
<!-- 2. 使用注释事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
@Transactional(propagation=Propagation.REQUIRED,
        rollbackFor=Exception.class, timeout=1,
        isolation=Isolation.DEFAULT)
public void saveUser(Map<String, String> map) throws Exception {
    System.out.println("方法开始");
    for (int i = 0; i < 500000; i++) {
        System.out.println("*");
    }
    System.out.println("进入保存");
    userDao.saveUser(map);
    System.out.println("退出保存");
} 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,148评论 6 342
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 11,196评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,088评论 19 139
  • 不知道何时我喜欢上了远方,渴望走出脚下这片土地,在黑夜里寻找夜空中最亮的星。从小生活在祖国最南端的我,看遍了山清水...
    枺一文字阅读 1,742评论 2 2
  • 四月的天气,阴晴不定,皮肤容易受到外界环境温度的变化而改变。这时候更要注重肌肤的护理和开始有矛头出现的过敏皮肤了。...
    医知肤胡老师阅读 3,110评论 0 1

友情链接更多精彩内容