gpt4 book ai didi

java - Spring Boot 配置覆盖被忽略

转载 作者:行者123 更新时间:2023-12-02 09:15:23 29 4
gpt4 key购买 nike

我编写了许多通过 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=<host> 来做到这一点作为启动客户端时的 VM 参数。不幸的是,这不起作用。客户端最终尝试连接到本地主机并失败(出于明显的原因)。

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

最佳答案

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

示例:

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

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

关于java - Spring Boot 配置覆盖被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59037360/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com