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的配置文件

    

    
    <context:property-placeholder location="classpath:resources/db.properties" />
    <context:property-placeholder location="classpath:resources/log4j.properties" />
    
    <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>

    
      <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-8value>  
                    <value>text/json;charset=UTF-8value>  
                     <value>application/json;charset=UTF-8value>  
                 list>  
             property>  
   bean>
    
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        
        <property name="typeAliasesPackage" value="com.dncps.value" />
        
        <property name="mapperLocations" value="classpath:mapper/*Mapper.xml" />
        <property name="dataSource" ref="dataSource" />
    bean>
    
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg ref="sqlSessionFactory" />
    bean>

    
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    bean>

    
    <tx:annotation-driven transaction-manager="transactionManager"/>

      
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">  
    <property name="defaultErrorView">     
        <value>/error/errorvalue>  
    property>  
    <property name="defaultStatusCode">     
        <value>500value>  
    property>      
<property name="warnLogCategory">     
        <value>org.springframework.web.servlet.handler.SimpleMappingExceptionResolvervalue>  
    property>      
bean> 

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

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

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

修改后:
将错误的注入修改为
将没有注入修改为

重启运行OK

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

你可能感兴趣的:(框架)