spring 配置文件被加載兩次


如下web.xml示例:

1.用spring的配置加載contextConfigLocation

2.配置spring-mvc的contextConfigLocation

 

<servlet>
    <servlet-name>spring-mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring/spring-*.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>spring-mvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

 <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/spring-*.xml</param-value>
  </context-param>

 

看了配置,spring下面的文件在springmvc中加載了一次,在context中又加載了一次。

從啟動日志和啟動時長可以看到。 補充:重復加載還會導致配置的task,schadule任務重復執行!

所以,合理的做法是,把spring-mvc的定義單獨摘出來定義在web容器啟動的時候加載,名稱也換成servlet-mvc.xml避免被spring重復加載, 而在spring的core xml定義中,不要出現mvc的東東

<servlet>  
    <servlet-name>spring-mvc</servlet-name>  
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    <!--查找controller位置的xml文件配置 -->  
    <init-param>  
        <param-name>contextConfigLocation</param-name>  
        <!--查找這里可以配置多個,用逗號分割或者用通配符*也就是第二行 -->  
        <param-value>/WEB-INF/classes/servlet-mvc.xml</param-value>  
    </init-param>  
    <load-on-startup>1</load-on-startup>  
    <async-supported>true</async-supported>  
</servlet>  

 

springmvc的xml單獨配置出來,spring本身管spring的,springmvc管springmvc的,這樣就ok了

 

總結:該分開配置的不要合在一起。注意代碼使用

 


免責聲明!

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



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