【问题标题】:where is port 8080 defined in spring cloud app?spring cloud app中定义的8080端口在哪里?
【发布时间】:2016-08-03 13:42:41
【问题描述】:

在将this spring cloud app on github 中的代码下载并安装到我的devbox 后,我一直在逐行研究它。当您在 Web 浏览器中键入 http://localhost:8080 时,将加载来自 ui 应用程序的内容,并且能够与来自 authserverresource 应用程序的内容进行交互。

Port 9999 是为authserver 应用程序定义的,既在ui 应用程序的zuul route 定义中,也在authserver 应用程序的application.properties 定义中。

同样,port 9000 是为resource 应用程序定义的,既在ui 应用程序的路由定义中,也在resource 应用程序的application.properties 中。

但我找不到对port 8080 的任何引用,即使在查看了三个应用程序中的每一行代码并执行Ctrl-H 以对整个eclipse 工作区进行全文搜索以查找单词8080 之后也是如此。

那么ui 应用程序如何知道在port 8080 上提供其客户端内容?

【问题讨论】:

  • 除非你改变它,否则它是默认的。

标签: spring spring-boot spring-cloud netflix-zuul


【解决方案1】:

UI 模块有以下 Spring Boot 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

该依赖项有它自己的依赖项,如下所示:

Spring Boot Starter Web POM.xml

这包括 Spring Boot 的 Tomcat Starter:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>

其中引入了实际的 Tomcat 嵌入式 jars

Spring Boot Starter Tomcat POM.xml

因为 UI 应用程序是一个 Spring Boot 应用程序(例如,它使用 Spring Boot Parent POM 并使用 @SpringBootApplication 注释了它的主类)它会根据 Classpath 为我们自动配置许多东西。

注意这个类中的@ConditionalOnClass 注解:

EmbeddedServletContainerAutoConfiguration

这最终导致了这个类:

TomcatEmbeddedServletContainer

这会触发嵌入式 Tomcat 服务器的启动。

默认端口 8080 设置实际上来自嵌入式 Tomcat 依赖项,如下所示:

org.apache.catalina.startup.Tomcat

protected int port = 8080;

【讨论】:

  • 参考文献的方法。谢谢你和 +1。
【解决方案2】:

您可以使用 .properties 或 .yml 文件来存储应用程序的所有配置。在那里你可以定义服务器端口属性来监听你想要的任何端口。

如果您使用 .properties 文件,它会是这样的:

server.port=8082

或者在 .yml 文件中是这样的:

server:
  port: 8082

更多关于spring的属性和配置,查看this

【讨论】:

  • 这不涉及 OP。如 OP 中所述,该受访者提到的任何内容似乎都没有在示例应用程序中完成。 OP 询问示例应用程序是如何做到的。示例ui 应用程序中application.yml 的直接链接是:github.com/spring-guides/tut-spring-security-and-angular-js/…
  • 默认情况下,Spring 将在端口 8080 中启动您的应用程序。如果您在属性文件中覆盖它,它将在您的端口中启动。您的代码中没有 8080 的引用,因为它是 Spring 的默认设置。
  • @NickTsitlakidis 默认端口 8080 实际上不是 Spring 设置。它来自嵌入式 Apache Tomcat 依赖项。有关更多详细信息,请参阅此答案:stackoverflow.com/a/36586730/1078565
  • @punkrocker27ka 这不是针对 Tomcat 的。使用其他嵌入式服务器(例如,Undertow 或 Jetty)也将默认设置设置为 8080。所以我猜 Spring 设置了这个。
  • 不,只是巧合,这些 servlet 容器默认使用 8080。 Spring 没有为 server.port 属性设置默认值,如果设置了自定义值,它只会使用它。
【解决方案3】:

所有 spring boot 默认属性都有一个参考,一旦你遇到一些未知的默认值,就应该检查它:)

https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-05
    • 2018-12-23
    • 2019-12-11
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    相关资源
    最近更新 更多