【问题标题】:maven: can't override server.port for tomcat servermaven:无法覆盖 tomcat 服务器的 server.port
【发布时间】:2018-12-14 20:42:03
【问题描述】:

我是 Maven/SpringBoot 的新手,正在尝试使用不同的 Tomcat 服务器端口部署存储库。

默认情况下,我很乐意在 :8080 上运行 tomcat。但是今天,我想将 Jenkins 管道添加到我的项目中,并在我的 spring 云网关存储库之前将 tomcat 部署在:8080(上面有 jenkins)。

现在,一旦我尝试部署网关,编译器显然会显示address :8080 already in use

现在,我希望我的网关将 Tomcat 部署在另一个端口上,(或者如果可能的话,在 :8080 上使用已经存在的 Tomcat?)所以我想使用这个命令来部署它:

$ mvn spring-boot:run -Dserver.port=8181

但是,基于:8080 的相同错误恰好出现:

[ERROR] 未能执行目标 org.springframework.boot:spring-boot-maven-plugin:1.5.8.RELEASE:run 项目 crw-gateway 上的 (default-cli): 发生异常时 跑步。 null:InvocationTargetException:连接器配置为 8080端口监听启动失败。

我尝试将server.port=8080 放入application.propertiesapplication-dev.properties 文件,但我无法覆盖它。

有什么想法吗?如何覆盖端口?是否有可能我可以在 :8080 上使用已经存在的 tomcat-server?

感谢您的宝贵时间!

编辑:我在 ~/config 文件夹下有我的配置。在那里,我有gateway.properties,其中包括server.port=8080 行。正如接受的答案所断言的那样,它已经覆盖了命令行界面。将其更改为 8888 有效。

【问题讨论】:

    标签: java spring maven tomcat jenkins


    【解决方案1】:

    根据Spring Boot documentation

    Spring Boot 使用一个非常特殊的 PropertySource 顺序,旨在允许合理地覆盖值。属性是 按以下顺序考虑:

    1. 您的主目录上的 Devtools 全局设置属性(~/.spring-boot-devtools.properties 当 devtools 处于活动状态时)。
    2. @TestPropertySource 测试中的注释。
    3. @SpringBootTest#properties 注释属性添加到您的测试中。
    4. 命令行参数。
    5. 来自SPRING_APPLICATION_JSON 的属性(嵌入在环境变量或系统属性中的内联 JSON)。
    6. ServletConfig 初始化参数。
    7. ServletContext 初始化参数。
    8. 来自java:comp/env 的JNDI 属性。
    9. Java 系统属性 (System.getProperties())。
    10. 操作系统环境变量。
    11. 仅在 random.* 中具有属性的 RandomValuePropertySource
    12. 打包 jar 之外的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)。
    13. 打包在您的 jar 中的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)。
    14. 打包 jar 之外的应用程序属性(application.properties 和 YAML 变体)。
    15. 应用程序属性打包在您的 jar 中(application.properties 和 YAML 变体)。
    16. @PropertySource @Configuration 类的注释。
    17. 默认属性(通过设置SpringApplication.setDefaultProperties 指定)。

    所以你的问题是你的命令行(4.)不能覆盖application.properties文件配置(13.、14.、15.)。

    如果你想覆盖server.port 属性,你需要确保在你的配置中遵守这个顺序。

    【讨论】:

    • 我从没想过我的gateway.properties 文件。问题解决了。非常感谢!
    • 顺便问一下,我的gateway可以在:8080上使用已经存在的tomcat吗?有机会吗?我想我可以像为詹金斯做的那样做:在webapps 下添加war 文件。除此之外还有其他解决方案吗?
    • 我不确定你的意思。如果任何进程正在使用端口 8080,则没有其他进程可以使用它。如果它是嵌入在 Tomcat 中的 WAR,则您的网关只能使用端口 8080,否则这是不可能的。
    • 我想在同一个 tomcat 实例上部署我的一些模块(配置服务器、发现服务器等),我想知道是否可以使用 Jenkins 将其自动化。推送后,Jenkins 代理会创建来自存储库的 WAR,将其复制到 /webapps 文件夹下(并删除最后一个 WAR 构建的 c),然后重新启动 Tomcat。那可能吗? (可惜atm不能试用)
    • 是的,这是可能的。我建议你看看 Tomcat Jenkins 插件进行部署,而不是将 WAR 复制到 webapps 目录中。
    猜你喜欢
    • 1970-01-01
    • 2015-05-21
    • 2013-01-14
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    相关资源
    最近更新 更多