我编写了许多通过 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>
关于java - Spring Boot 配置覆盖被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59037360/