命令行中的 server.port 不能与 spring cloud config server 和 eureka server 一起使用

Posted

技术标签:

【中文标题】命令行中的 server.port 不能与 spring cloud config server 和 eureka server 一起使用【英文标题】:server.port in command line not working with spring cloud config server and eureka server 【发布时间】:2017-05-17 04:46:32 【问题描述】:

我正在研究弹簧罐。我现在拥有的是spring cloud config server和eureka server。

配置服务器代码

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication 

    public static void main(String[] args) 
        SpringApplication.run(ConfigServerApplication.class, args);
    

application.properties

spring.application.name=config-server
spring.cloud.config.server.git.uri=https://github.com/vincentwah/spring-cloud-config-repository/
server.port=7001

Eureka 服务器代码

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication 

    public static void main(String[] args) 
        SpringApplication.run(EurekaServerApplication.class, args);
    

bootstrap.properties

spring.application.name=eureka-server
spring.cloud.config.uri=http://localhost:7001/

eureka-server 的配置是https://github.com/vincentwah/spring-cloud-config-repository/blob/master/eureka-server.properties

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:$server.port/eureka/
server.port=1111

当我启动 eureka 服务器时,我想更改端口,所以我运行下面的命令

java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --server.port=1234

但是,服务器仍然使用端口 1111 启动

2017-01-03 14:04:11.324  INFO 6352 --- [      Thread-10] c.n.e.r.PeerAwareInstanceRegistryImpl    : Changing status to UP
2017-01-03 14:04:11.339  INFO 6352 --- [      Thread-10] e.s.EurekaServerInitializerConfiguration : Started Eureka Server
2017-01-03 14:04:11.492  INFO 6352 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 1111 (http)
2017-01-03 14:04:11.493  INFO 6352 --- [           main] c.n.e.EurekaDiscoveryClientConfiguration : Updating port to 1111
2017-01-03 14:04:11.500  INFO 6352 --- [           main] com.example.EurekaServerApplication      : Started EurekaServerApplication in 27.532 seconds (JVM running for 29.515)

我认为我在命令行中使用 --server.port 没有做错。有人遇到同样的问题吗?

【问题讨论】:

哪个操作系统?试试--SERVER_PORT=1234 Windows 7 + 春季启动 1.4.3 。我试过 --SERVER_PORT=1234 ,但没有用。我在github.com/vincentwah/spring-boot/tree/master/config-server 和github.com/vincentwah/spring-boot/tree/master/eureka-server 有源代码 刚刚注意到您从配置服务器检索属性...如果我没记错的话,这些属性确实优先于其他定义的属性。 正如docs.pivotal.io/spring-cloud-services/1-3/config-server/… 所述,“配置服务器的属性将覆盖本地定义的属性”。但是docs.spring.io/spring-boot/docs/current/reference/html/…也提到,“命令行属性总是优先于其他属性源”,所以如果我使用config server,那么没有办法动态更改server.port? 嗯...问题是--server.port 是命令行参数还是-Dserver.port。此外,Spring Cloud 在这里优先(Spring Boot 所做的一切基本上都属于本地定义的类别)。 【参考方案1】:
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:$server.port/eureka/
server.port=1111
spring.cloud.config.allowOverride=true
spring.cloud.config.overrideNone=true
spring.cloud.config.overrideSystemProperties=false

这是有效的。

【讨论】:

【参考方案2】:

Spring Cloud Config 默认覆盖本地配置。它旨在成为真理的来源。您可以使用配置文件,因此该端口未使用特定配置文件定义。如果真的不需要(例如在测试中),您也可以禁用配置客户端。

还有allow overrides的选项。

由 引导上下文通常是“远程的”(例如来自配置服务器),并且 默认情况下,它们不能在本地被覆盖,除了命令 线。如果您想允许您的应用程序覆盖远程 具有自己的系统属性或配置文件的属性, 远程属性源必须通过设置授予它权限 spring.cloud.config.allowOverride=true(设置这个不行 本地)。一旦设置了该标志,就会有一些更细粒度的设置 控制与系统相关的远程属性的位置 属性和应用程序的本地配置: spring.cloud.config.overrideNone=true 覆盖任何本地 财产来源,以及 spring.cloud.config.overrideSystemProperties=false 如果只有系统 属性和环境变量应该覆盖远程设置,但不是 本地配置文件。

【讨论】:

另外请注意关于分散配置的这一点。 ***.com/questions/37316835/…

以上是关于命令行中的 server.port 不能与 spring cloud config server 和 eureka server 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Java:Eclipse 中的行号与命令行中的行号相同吗? [关闭]

vsize 函数不能与 PL/SQL 中的修剪函数一起使用

MySql在命令行中正确连接,但不能远程连接

为啥我不能指定环境变量并在同一命令行中回显它?

属性配置文件详解

属性配置文件详解