没有URL映射的Spring自定义启动Servlet被调用

时间:2018-07-19 08:26:54

标签: spring-boot servlets

我已经将应用程序从标准Ja​​va 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或如何禁止它。

0 个答案:

没有答案