spring mvc注解事务的启用

在mybatis配置文件spring-mybatis.xml配置数据源及支持注解事务及事务的代理方式

proxy-target-class="true" 事务注解可配置在实现类方法上,需要CGLIB支持
proxy-target-class="false" 事务注解配置在接口上,使用默认的JDK代理支持
   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath*:/mapping/sixone/*Mapper.xml"/>
    </bean>
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.dao.sixone" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>    
        <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 注解方式配置事物 -->
    <tx:annotation-driven  proxy-target-class="true"    transaction-manager="transactionManager" />     

 

在spring mvc配置文件spring-mvc.xml配置扫描包方式包括待事务注解的service,默认spring mvc扫的是原生service。

<!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 -->
    <context:component-scan base-package="com.controller" >
         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />   
    </context:component-scan>

 

在带有@Service注解的类中写事务方法,然后调用尽量不要在该类中调用,不要在事务方法try catch,而是去外层捕获这样才会回滚,这里指定了回滚异常Exception.class。

注意:方法必须public

    @Transactional(value = "transactionManager", propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = false)
    public int savePayNotice(JDCreateOrder payOrder)throws Exception{
        return createOrderMapper.updateOrderByOrderNo(payOrder);
    }

 

最后调用

try {
                int count = savePayNotice(payOrder);
                if (count>0) {
                    //ok
                }else{
                    return;
                }
            } catch (Exception e) {
               return;
            }

 

posted @ 2018-03-07 11:41  稚语希听  阅读(506)  评论(0)    收藏  举报