springMVC和spring各自掃描自己的注解不要相互混淆


1、問題 

       執行 entityManager.flush();  總是報錯:javax.persistence.TransactionRequiredException: no transaction is in progress

字面解釋是:“沒有啟動事務”。可是事務是在配置中交給了spring管理了,在方法上加注解 @Transactional就申明了事務的,為何說沒有啟動事務呢。而且配置中也啟動事務注解的掃描了。 <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />。

2、原因

     折騰了很久,分析了很久,也看了一些文章,都沒說在關鍵上,后來有一個文章豁然開朗http://blog.csdn.net/lzw190/article/details/18989301。
 

3、解決

      讓springMVC的配置xml和spring容器的配置xml分開,在各自的xml中配置自己該做的事情,不要讓springMVC去掃描不該自己管理的注解。

   3.1  springMVC部分

     3.1.1 web.xml 中 springMVC相關部分

     
   <servlet>  
        <servlet-name>springMVC</servlet-name>  
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>  
    </servlet>  
    <servlet-mapping>  
        <servlet-name>springMVC</servlet-name>  
        <url-pattern>/</url-pattern>  
    </servlet-mapping>  

   

    3.1.2 mvc.xml 文件中關鍵部分

         <!-- 開啟springMVC注解支持 -->
     <mvc:annotation-driven />
    <mvc:default-servlet-handler/>
    
<!-- 掃描Controller -->
       <context:component-scan base-package="org.cj.controller">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
      </context:component-scan>

   3.2  spring容器部分

          spring容器需要掃描的注解,放在別的xml中,讓spring 的Listener去解讀

      3.2.1  web.xml 中spring容器關鍵部分

            <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>  
  <!--說明: 需要讓spring 容器解讀的配置,放在spring-開頭的xml文件中 -->
          /WEB-INF/spring-*.xml  
      </param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>  

      3.2.2 spring-core.xml文件關鍵部分

            <!-- 自動加載構建bean -->
<context:component-scan base-package="org.cj" />


         <!--開啟spring的事務申明注解支持-->
        <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />


免責聲明!

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



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