SSM框架事务管理不起作用,不回滚的原因之一

如果当框架搭建完成,并反复确认框架的配置文件、事务声明都没有问题,但就是不会滚。

原配置文件如下:
springmvc的配置文件

    <context:component-scan base-package="com.dncps.*" /><!-- **错误的注入** -->
    <!-- 配置映射器与适配器 -->
     <mvc:annotation-driven></mvc:annotation-driven>

     <mvc:resources mapping="/js/**" location="/js/"/>
    <mvc:resources mapping="/css/**" location="/css/"/>
    <mvc:resources mapping="/fonts/**" location="/fonts/"/>
    <mvc:resources mapping="/images/**" location="/images/"/>

原spring的配置文件

    <!-- **1没有注入** -->

    <!-- 2加载数据资源文件 -->
    <context:property-placeholder location="classpath:resources/db.properties" />
    <context:property-placeholder location="classpath:resources/log4j.properties" />
    <!-- 3配置数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.user}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!-- 自动转json,处理乱码 -->
      <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
            <property name="messageConverters">  
                 <list>  
                    <ref bean="mappingJackson2HttpMessageConverter" />  
                </list>  
           </property>  
    </bean>  

    <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
             <property name="supportedMediaTypes">  
                 <list>  
                     <value>text/html;charset=UTF-8</value>  
                    <value>text/json;charset=UTF-8</value>  
                     <value>application/json;charset=UTF-8</value>  
                 </list>  
             </property>  
   </bean>
    <!-- 4配置sessionfactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
        <property name="typeAliasesPackage" value="com.dncps.value" />
        <!-- 显式指定Mapper文件位置 -->
        <property name="mapperLocations" value="classpath:mapper/*Mapper.xml" />
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 5配置session -->
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg ref="sqlSessionFactory" />
    </bean>

    <!-- 6、声明式事务管理,依赖于前面声明的dataSource数据源 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- 7、注解事务切面 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!-- 8总错误处理-->  
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
    <property name="defaultErrorView">     
        <value>/error/error</value>  
    </property>  
    <property name="defaultStatusCode">     
        <value>500</value>  
    </property>      
<property name="warnLogCategory">     
        <value>org.springframework.web.servlet.handler.SimpleMappingExceptionResolver</value>  
    </property>      
</bean> 

在上面的两个配置文件都是正确的,并且也使用@Transactional 进行事务声明,项目可以正常运转,但就是在错了的时候事务不回滚。困扰了好久。
知道看到一位仁兄的一篇博客,他也是有这样的问题,最后解决了。
这个问题不是事务配置的问题,而是扫描前后顺序的问题。在之前的springmvc配置文件中,我扫描了所以的bean文件,但我们是用spring声明管理事务的。

即我们xml加载的springmvc配置时扫描了所有的bean文件,其中有springmvc管理的也有spring管理的,而我们通过spring声明事务时,spring没有扫描和管理bean的配置,即没有权利,所以bean文件并不会被spring管理,所以不会错误回滚。配置文件不同管理域也不同,储存不同地方的东西,但是都可以注入文件。

明白了这个后问题就不是问题了,配置springmvc是管理控制层的,只需注入control层就好,而spring中有事务、切面、sessionfactory等等,可以扫描全部进行注入。

修改后:
将错误的注入修改为<context:component-scan base-package="com.dncps.action" />
将没有注入修改为<context:component-scan base-package="com.dncps.*" />

重启运行OK

最后附上仁兄地址以表感谢:http://blog.csdn.net/xiaoyu19910321/article/details/52457482#reply

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值