zoukankan      html  css  js  c++  java
  • 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" />

  • 相关阅读:
    POJ2778 DNA Sequence AC自动机上dp
    codeforces732F Tourist Reform 边双联通分量
    codeforces786B Legacy 线段树优化建图
    洛谷P3588 PUS 线段树优化建图
    codeforces1301D Time to Run 模拟
    codeforces1303B National Project 二分或直接计算
    codeforces1303C Perfect Keyboard 模拟或判断欧拉路
    codeforces1303D Fill The Bag 二进制应用+贪心
    python之路——使用python操作mysql数据库
    python之路——mysql索引原理
  • 原文地址:https://www.cnblogs.com/gmq-sh/p/6016590.html
Copyright © 2011-2022 走看看