SpringMvc 事務的注解配置、實現、掛起


1、事務的配置

Spring-MyBaties.XML配置
    <!-- spring mvc 自動掃描注解的時候,不去掃描@Service -->
    <context:component-scan base-package="com.spdbccc.manager">
        <!--將Controller的注解排除掉 -->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    </context:component-scan>
    <util:properties id="app" location="classpath:app-${env}.properties"/>

    <bean id="dataSource_1" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="#{app.jndiName_member}"/>
    </bean>
    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory_1" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource_1"/>
        <property name="configLocation" value="classpath:spring/vazh_mybatis.xml"/>
    </bean>
    <!-- DAO接口所在包名,Spring會自動查找其下的類 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.spdbccc.manager.vazh.*.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory_1"></property>
    </bean>
     <!--定義事務管理器-->
    <bean name="transactionManager_1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource_1"></property>
    </bean>

2、事務的使用

在需要實現事務的類聲明或方法聲明上加@Transactional注解
@Transactional( value = "transactionManager_1", readOnly = false, isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)


3、事務的掛起
NOT_SUPPORTED:聲明方法不需要事務。如果方法沒有關聯到一個事務,容器不會為它開啟事務。如果方法在一個事務中被調用,該事務會被掛起,在方法調用結束后,原先的事務便會恢復執行。
例如 方法A支持事務
方法B不支持事務。
方法A調用方法B。
在方法A開始運行時,系統為它建立Transaction,方法A中對於數據庫的處理操作,會在該Transaction的控制之下。
這時,方法A調用方法B,方法A打開的 Transaction將掛起,方法B中任何數據庫操作,都不在該Transaction的管理之下。
當方法B返回,方法A繼續運行,之前的Transaction回復,后面的數據庫操作繼續在該Transaction的控制之下 提交或回滾。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM