zoukankan      html  css  js  c++  java
  • spring整合mybatis的事物管理配置

    一、基本配置

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="
         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
         http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
         http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
    
    
    
        <!-- 连接池配置 -->
        <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
            <property name="poolName" value="springHikariCP" />
            <property name="connectionTestQuery" value="SELECT 1" />
            <property name="dataSourceClassName" value="${jdbc.driverClassName}" />
            <property name="dataSourceProperties">
                <props>
                    <prop key="url">${jdbc.url}</prop>
                    <prop key="user">${jdbc.username}</prop>
                    <prop key="password">${jdbc.password}</prop>
                    <prop key="cachePrepStmts">true</prop>
                    <prop key="prepStmtCacheSize">250</prop>
                    <prop key="prepStmtCacheSqlLimit">2048</prop>
                </props>
            </property>
            <!-- 控制自动提交行为 default:true -->
            <property name="autoCommit" value="true"/>
            <!--连接池获取的连接是否只读 default:false-->
            <property name="readOnly" value="false"/>
            <!--最大连接超时时间 default:30秒-->
            <property name="connectionTimeout" value="30000"/>
            <!--最大空闲超时时间 default:10分钟   -->
            <property name="idleTimeout" value="600000"/>
            <!--连接池中一个连接的最大生命周期 default:30分钟-->
            <property name="maxLifetime" value="1800000 "/>
        </bean>
        <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
            <constructor-arg ref="hikariConfig" />
        </bean>
    
        <!-- define the SqlSessionFactory -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <property name="configLocation" value="classpath:META-INF/mybatis/mybatis-config.xml"/>
            <property name="mapperLocations" value="classpath:META-INF/mybatis/mapper/*.xml"/>
        </bean>
    
    
        <!-- scan for mappers and let them be autowired -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="annotationClass" value="org.springframework.stereotype.Repository"/>
            <property name="basePackage" value="com.geenk.market.dal"/>
        </bean>
    
        <!-- 声明编码方式事务 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
        <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
            <property name="transactionManager" ref="transactionManager"/>
            <!--ISOLATION_DEFAULT 表示由使用的数据库决定  -->
            <property name="isolationLevelName" value="ISOLATION_DEFAULT"/>
            <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
        </bean>
        <!-- 启动使用注解实现声明式事务管理的支持-->
        <tx:annotation-driven transaction-manager="transactionManager" />
    
    </beans>
    

      该配置方案是最基本的事物配置方案,MyBatis自动参与到spring事务管理中,无需额外配置,只要org.mybatis.spring.SqlSessionFactoryBean引用的数据源与DataSourceTransactionManager引用的数据源一致即可,否则事务管理会不起作用。但是缺点是事物的传播行为都是一致的,不能精确的为特定的方法配置事物的传播行为。

    二、增强配置

    <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <tx:method name="add*" propagation="REQUIRED" />
                <tx:method name="insert*" propagation="REQUIRED" />
                <tx:method name="save*" propagation="REQUIRED" />
                <tx:method name="update*" propagation="REQUIRED" />
                <tx:method name="modify*" propagation="REQUIRED" />
                <tx:method name="edit*" propagation="REQUIRED" />
                <tx:method name="delete*" propagation="REQUIRED" />
                <tx:method name="remove*" propagation="REQUIRED" />
                
                <tx:method name="get*" propagation="SUPPORTS" />
                <tx:method name="find*" propagation="SUPPORTS" />
                <tx:method name="load*" propagation="SUPPORTS" />
                <tx:method name="search*" propagation="SUPPORTS" />
                <tx:method name="datagrid*" propagation="SUPPORTS" />
    
                <tx:method name="*" propagation="SUPPORTS" />
            </tx:attributes>
        </tx:advice>
        <aop:config>
            <aop:pointcut id="transactionPointcut" expression="execution(* com.geenk.market.dal..*Impl.*(..))" />
            <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" />
        </aop:config>
    

      此种配置方案可以精确事物到特定方法,对数据库有改动的操作如新增、修改、和删除。以事物方式来进行,对数据库无改动的操作则可以以非事物的方式来进行。

    三、基于注解配置

    <!-- 配置事务管理器-->
     <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref="dataSource"></property>
    </bean>
    <tx:annotation-driven transaction-manager="txManager"/>
    

      然后只要在要使用的类或方法上加上注解@Transactional便可。

  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    《EffectiveJava中文第二版》 高清PDF下载
    《MoreEffectiveC++中文版》 pdf 下载
    《啊哈c语言》 高清 PDF 下载
  • 原文地址:https://www.cnblogs.com/geekdc/p/8556302.html
Copyright © 2011-2022 走看看