在不同端口上注册 Spring Boot Servlet
Posted
技术标签:
【中文标题】在不同端口上注册 Spring Boot Servlet【英文标题】:Sprint Boot Servlet Registration on a different port 【发布时间】:2021-07-13 18:38:16 【问题描述】:我有一个带有@RestController 的spring-boot 应用程序,需要在不同的端口上注册一个servlet,而RestController 绑定到默认端口。
我有一个 application.yml 文件和一个 src>main>resources>application.properties 文件。
这是我的 Servlet 注册类
@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 类:
公共类 MyServlet 扩展 AbstractXServlet private static final 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 端点所在的默认端口不同。但是现在,我无法打印任何日志消息。不知道我做错了什么。非常感谢任何帮助。
【问题讨论】:
【参考方案1】:我想在我的 application.properties 文件中定义 servlet 的端口,与所有 RestController 端点所在的默认端口不同
...这实质上意味着您希望拥有一个单独的 Web 服务器,运行在与应用程序的其余部分不同的端口上。就个人而言,我会为此创建一个完全独立的SpringBootApplication
。
但是,如果您坚持将其捆绑在一个应用程序中,您可以 create an additional embedded container 不注册默认 servlet (.setRegisterDefaultServlet(false)
),而只注册您的自定义 servlet。
您需要确保您的自定义工厂不会覆盖应用程序其余部分将绑定到的嵌入式容器的通常自动配置。您可能需要复制默认 servlet 的原始 ServletWebServerFactoryConfiguration
的部分内容,并将其标记为 @Primary
以将其与您的自定义 servlet 容器区分开来。
【讨论】:
以上是关于在不同端口上注册 Spring Boot Servlet的主要内容,如果未能解决你的问题,请参考以下文章
在不同端口的同一个 tomcat 上部署 Angular 5 和 Spring Boot 应用程序
如何让Javamelody使用不同的端口(Spring Boot+暴露的两个HTTP端口)
将 Spring Boot 应用程序部署到外部 tomcat 服务器时,通过 application.properties 更改其端口