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

  • 相关阅读:
    Mybatis之动态构建SQL语句(转)
    清理docker大日志文件
    删除一直处于deleting状态的数据卷
    kvm虚拟化平台搭建
    交换机的Access口与Trunk口
    linux命令tee用法
    openstack之镜像管理
    Sword redis存取二进制数据
    Sword STL迭代器prev,next相关函数
    C++ 拷贝构造函数之const关键字
  • 原文地址:https://www.cnblogs.com/gmq-sh/p/6016590.html
Copyright © 2011-2022 走看看