美文网首页
数据库事务管理

数据库事务管理

作者: 絮叨客 | 来源:发表于2017-02-08 16:29 被阅读101次

    事务基本概念

    《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("退出保存");
    } 
    

    相关文章

      网友评论

          本文标题:数据库事务管理

          本文链接:https://www.haomeiwen.com/subject/rmzvittx.html