【问题标题】:How to run @RestController on a different port?如何在不同的端口上运行@RestController?
【发布时间】:2016-03-01 18:37:45
【问题描述】:

我正在使用spring-rest 创建一些@RestController servlet。该应用程序不是在网络服务器上运行,而是作为一个简单的命令行工具,嵌入了 tomcat。

它们中的大多数应该在使用server.port=80 属性指定的公共端口上运行。

问题:如何在不同的端口上运行不同的@RestController?所以其中一些只能在内部访问?

@RestController 
@RequestMapping("test")
public class TestServlet {

    @RequestMapping(value = "/", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE)
    @ResponseStatus(HttpStatus.OK)
    @ResponseBody
    public String test() { return "OK"; }
}

【问题讨论】:

    标签: java spring rest spring-rest


    【解决方案1】:

    我建议使用代理。它可以是 Apache Web 服务器或 Ngix。您需要在网络服务器中配置两个虚拟主机(在不同的端口)。并将调用重定向到您的 tomcat 服务器。您可以将控制器加载到不同的路径中,以便更轻松地代理来自 weberver 的调用。

    最后,您的客户端通过 Web 服务器而不是直接向 tomcat 进行调用。

    【讨论】:

    • 嗯,但这意味着我必须将我的应用程序显式部署到应用程序服务器,并且不能再将其作为控制台工具运行。如果属实,是否有替代方案坚持嵌入式 tomcat 方法?
    • 其他选项是具有不同的上下文路径,具体取决于功能。之后,您可以保护您的应用程序,以便只有您想要的人才能访问正确的路径。或者您可以将功能分离到两个项目中,一个在 X 端口运行,另一个在 Y 端口运行。您可以将功能放在一个单独的 jar 中,这样您只需编辑 jar 并在两个 tomcat 应用程序中运行 jar。
    【解决方案2】:

    如果您使用 Spring Boot,我认为您应该查看 Spring Boot Actuator。您的应用程序可以设置到一个端口,而执行器从另一个端口运行。

    这里有一个指南,展示了如何更改执行器的端口 - https://spring.io/guides/gs/actuator-service/

    【讨论】:

    • 是的,我正在使用spring-boot。查看actuator 项目,我无法理解您的意思——运行不同的端口。你能举个直接的例子吗?据我所知,actuator 在不同的端口上提供了几个生产就绪的 servlet,例如 health 检查。但是,将一些自定义 servlet 添加到该执行器端口可能不是一个好主意,因为它还有其他用途。无论如何,执行器项目如何成功地在不同的端口上启动 servlet 会很有趣。你知道吗?
    • 指南中有一个部分向您展示了如何设置执行器端点以在单独的端口上运行,只需修改您的 application.properties - spring.io/guides/gs/actuator-service/…
    • 对不起,我想我误解了你的最后一个问题。我只知道如何激活执行器,而不是重新创建该功能。
    猜你喜欢
    • 2015-03-17
    • 2012-09-15
    • 2018-01-14
    • 2014-04-14
    • 1970-01-01
    • 2023-04-07
    • 2021-12-16
    • 2020-06-07
    • 1970-01-01
    相关资源
    最近更新 更多