【问题标题】:Spring Boot configuration overrides are being ignoredSpring Boot 配置覆盖被忽略
【发布时间】:2019-11-25 17:40:41
【问题描述】:

我编写了许多通过 REST API 调用进行通信的服务。这些服务可以配置为使用 HTTP 或 HTTPS。任何给定的客户端都具有定义与服务器的连接的安全配置。 “默认”配置属性是由 application.yml 中的值设置的,到目前为止它运行良好。

然而,我开始意识到,这不适用于更现实的情况。问题是我试图设置特定的参数,比如客户端启动时的服务器主机/端口,而我设置的值被忽略了。

一个例子:

服务 A(客户端)将出于某种目的与服务 B(服务器)进行通信。 服务 A 的安全配置设置如下:

@Configuration
@EnableConfigurationProperties({ClientConnectionProperties.class,
    SecurityCertificateProperties.class})
public class ClientSecurityConfiguration {
  ...
}

@ConfigurationProperties("client.connection")
public class ClientConnectionProperties {
  ...
}

@ConfigurationProperties("server.ssl")
public class SecurityCertificateProperties {
  ...
}

application.yml 对分配给配置对象中的值的各种属性进行了定义。

client:
  connection:
    scheme: https
    host: localhost
    port: 8443

server:
  port: 7081
  ssl:
    enabled: true
    protocol: TLS
    trust-store-type: JKS
    trust-store: classpath:server.truststore
    trust-store-password: <password>
    key-store-type: JKS
    key-store: classpath:server.keystore
    key-store-password: <password>

当客户端和服务器都在本地主机上运行时,这一切都很好。但是,我正在测试在它们驻留在不同主机上的位置运行它们,因此我需要将 client.connection.host 从本地主机覆盖到实际主机。我通过在启动客户端时将 -Dclient.connection.host=&lt;host&gt; 指定为 VM 参数来做到这一点。不幸的是,这不起作用。客户端最终尝试连接到 localhost 并失败(原因很明显)。

如何将我的覆盖值设置到这些配置项中?有没有办法推迟或延迟“默认”加载,以便我的值生效?有没有其他技术可以让它们进入那里?

【问题讨论】:

标签: java spring-boot configuration


【解决方案1】:

您可以使用 Spring 参数而不是 JVM 参数来覆盖 Spring Boot 属性。

例子:

java -jar your-app.jar --client.connection.host=<host>

相关问题:https://stackoverflow.com/a/37053004/12355118

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 2018-06-21
    • 1970-01-01
    • 2018-08-04
    • 2017-04-21
    • 1970-01-01
    • 2022-12-14
    相关资源
    最近更新 更多