我编写了许多通过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参数来完成此操作。不幸的是,这不起作用。客户端最终尝试连接到localhost并失败(出于明显的原因)。
如何将我的替代值设置到这些配置项中?有没有办法推迟或延迟“默认”加载,使我的值生效?还有其他一些技巧可用来使它们在那里吗?
答案 0 :(得分:1)
您可以使用Spring参数而不是JVM参数来覆盖Spring Boot属性。
示例:
java -jar your-app.jar --client.connection.host=<host>