我已经将应用程序从标准Java WEB项目迁移到了Spring Boot。在此过程中,我还必须迁移一个Servlet,其主要作用是初始化某些组件(读取属性文件等)。
旧版代码:
<servlet>
<servlet-name>startupservlet</servlet-name>
<servlet-class>my.package.name.StartupServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
新代码:
@Bean
public ServletRegistrationBean<StartupServlet> startupServletBean() {
ServletRegistrationBean<StartupServlet> bean = new ServletRegistrationBean<StartupServlet>(
new StartupServlet());
bean.setLoadOnStartup(1);
return bean;
}
这样做,访问任何URL时都会调用StartupServlet,这会扰乱应用程序的行为。
作为一种解决方法,我添加了一个虚拟路径,以便调用Servlet初始化代码,但是从不通过get和post方法。
我相信Spring Boot如何管理servlet声明时丢失了一些东西,但我仍然找不到。
[编辑]这不是一个真正的问题,因为按照@jbx的评论,我应该将其转换为@Service
。但是我只是想了解一下为什么默认情况下Spring会在每个路径上启用servlet或如何禁止它。