繁体   English   中英

在不同端口上注册 Sprint Boot Servlet

[英]Sprint Boot Servlet Registration on a different port

我有一个带有@RestController 的 spring-boot 应用程序,需要在不同的端口上注册一个 servlet,而 RestController 绑定到默认端口。

我有一个 application.yml 文件和一个 src>main>resources>application.properties 文件。

这是我的 Servlet 注册 class

@Configuration
public class ServletConfig {
    private static final Logger LOGGER = LoggerFactory.getLogger (ServletConfig.class);

    @Bean
    public ServletRegistrationBean<MyServlet> servletRegistrationBean(final ServletContext servletContext){
        LOGGER.info("Inside ServletRegistrationBean");
        final ServletRegistrationBean <MyServlet> bean = new ServletRegistrationBean <> (new MyServlet (), true, "/endpoint");
        bean.setLoadOnStartup (1);
        return bean;
    }

这是我的 MyServlet class:

公共 class MyServlet 扩展 AbstractXServlet{ 私有 static 最终 Logger LOGGER = LoggerFactory.getLogger (MyServlet.class);

public MyServlet() {
    LOGGER.info("Inside MyServlet Constructor");
    settings().setMultipartEnabled(false);
    final ServletHandlerr servletHandlerr = new ServletHandlerr();
    
    //Http POST Only
    handlerRegistry().registerHandler(EHttpMethod.POST, servletHandlerr);
}

}

我想在我的 application.properties 文件中定义 servlet 的端口,与所有 RestController 端点所在的默认端口不同。 但是现在,我无法打印任何日志消息。 不知道我做错了什么。 非常感谢任何帮助。

我想在我的 application.properties 文件中定义 servlet 的端口,与所有 RestController 端点所在的默认端口不同

...这实质上意味着您想要一个单独的 web 服务器,在与应用程序的 rest 不同的端口上运行。 就个人而言,我会为此目的创建一个完全独立的SpringBootApplication

但是,如果您坚持将其捆绑在一个应用程序中,您可以创建一个额外的嵌入式容器,该容器不注册默认 servlet ( .setRegisterDefaultServlet(false) ),而只注册您的自定义 servlet。

您需要确保您的自定义工厂不会覆盖应用程序的 rest 将绑定到的嵌入式容器的通常自动配置。 您可能需要复制默认 servlet 的原始ServletWebServerFactoryConfiguration的一部分,并将其标记为@Primary以将其与您的自定义 servlet 容器区分开来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM