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" />

  • 相关阅读:
    0121 集合类 ArrayList 的练习
    0121 有关接口的使用练习
    泛型相关知识
    0120 父类与子类创建、重写及转型练习
    0118练习 单例模式
    java设计模式 略版
    0117 面向对象OOP有关方法、类、构造方法及权限修饰符的练习
    0115 创建类并调用
    [luogu P2586] GCD 解题报告 (莫比乌斯反演|欧拉函数)
    POJ1284 Primitive Roots (原根)
  • 原文地址:https://www.cnblogs.com/gmq-sh/p/6016590.html
Copyright © 2011-2022 走看看