Spring Boot:在映射级别指定端口

Die*_*oia 5 port spring spring-boot

Spring Boot:我想实现以下目标:一些URL路径映射到一个端口,另一些映射到另一个。

换句话说,我想要类似的东西:

public class Controller1 {
  @RequestMapping(value="/path1", port="8080") public...
  @RequestMapping(value="/path2", port="8081") public...
}
Run Code Online (Sandbox Code Playgroud)

这样我的应用才能响应localhost:8080 / path1和localhost:8081 / path2

在应用内可以有2个独立的控制器。

通过为tomcat实现EmbeddedServletContainerCustomizer,我已经成功地取得了部分成功,但是如果可能的话,能够在控制器内实现此目标也将是一件不错的事情。

可能吗?

ale*_*xbt 5

您要尝试执行的操作将暗示该应用程序正在侦听多个端口。反过来,这意味着您将启动多个tomcat,因为spring-boot会将一个容器从一个端口启动。

你可以做什么

您可以使用不同的弹簧配置文件两次启动同一应用程序。每个配置文件将配置一个不同的端口。

2个属性:

application-one.properties: server.port=8080

application-two.properties: server.port=8081

2个控制器

@Profile("one")
public class Controller1 {
  @RequestMapping(value="/path1") public...
}

@Profile("two")
public class Controller2 {
  @RequestMapping(value="/path2") public...
}
Run Code Online (Sandbox Code Playgroud)

提供指定的弹簧轮廓后,将激活每个控制器。

发射两次

$ java -jar -Dspring.profiles.active=one YourApp.jar
$ java -jar -Dspring.profiles.active=two YourApp.jar
Run Code Online (Sandbox Code Playgroud)


h22*_*h22 2

虽然您无法阻止在不需要的端口上进行调用,但您可以指定HttpServletRequest控制器方法的其他参数,然后用于HttpServletRequest.getLocalPort()获取进行调用的端口。

然后,如果请求是在错误的端口上发出的,您可以手动返回 HTTP 错误代码,或者如果设计要求不同端口上的相同路径必须进行不同的处理,则可以转发到另一个控制器。