spring 配置文件被加载两次

Posted 全力以赴001

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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了

 

总结:该分开配置的不要合在一起。注意代码使用

 

以上是关于spring 配置文件被加载两次的主要内容,如果未能解决你的问题,请参考以下文章

spring中定时器每周执行两次

springboot2 log4j2 加载多次 加载两次 配置文件 加载顺序

使用spring 的定时器不懂为啥会执行两次

Apache Ignite 使用 Spring-Boot 加载两次?

Spring Task每次都会调用两次的问题

在一个活动中加载单个片段两次,从本地json文件中加载2个问题