SpringMVC懶加載與自動初始化

本文不討論 Spring 的 @Autowired 懶加載(lazy-init)問題。

今天突然發現一個問題。

在Tomcat啓動時,SpringMVC並沒有加載,而是第一次請求到來時才進行加載。

因爲SpringMVC加載較慢, 導致 httpClient 客戶端 超時而報錯。

Tomcat的 catalina.out 日誌信息如下:

05-Dec-2017 12:11:14.878 INFO 
  [main] org.apache.catalina.startup.Catalina.start Server startup in 21508 ms
[2017-12-05 12:14:06 DEBUG 
  org.springframework.web.servlet.DispatcherServlet:118 ] 
    Initializing servlet 'SpringMVC'
[2017-12-05 12:14:06 DEBUG 
  org.springframework.web.context.support.StandardServletEnvironment:109 ] 
    Adding [servletConfigInitParams] PropertySource with lowest search precedence

可以看到, 12:11 分 Tomcat啓動成功。 而 12:14 分才初始化 DispatcherServlet, 簡單排查了一下, 在 web.xml 中加上 load-on-startup 即可。


    <!-- 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>classpath:spring/spring-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>

然後重新啓動應用,一切正常。

因爲加載速度大多較快,所以多數應用都沒配置該參數。 但對於調用量較小的純API來說可能就會有一些影響。

load-on-startup 配置一般是大於0的數值,表示啓動順序。 如果相同,則表明這兩個Servlet啓動順序隨意。

如果是SpringBoot項目,則使用以下配置:

spring.mvc.servlet.load-on-startup=1

日期: 2017年12月05日

作者: 鐵錨: http://blog.csdn.net/renfufei

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章