java - Spring Boot 配置覆盖被忽略

标签 java spring-boot configuration

我编写了许多通过 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/

相关文章:

java - 方法的返回类型不止一种

java - 在初始化 SpringBootApplication 的 ApplicationContextInitializer bean 之前启动一个 @WebServlet

gradle - 如何确定是否已实例化Gradle任务(配置避免API)

.net - ConfigurationManager.AppSettings 为空?

java - 尝试用 Java 解析 XML 文件并将变量存储在 ArrayList 中

java - Izpack 安装程序 - 更改窗口标题和页脚

java - 如何在 Spring Data 中编写 Couchbase N1QL 查询?

rest - 不要使用 JHipster/Spring Boot 验证 REST 层中的某些字段

jsp - 如何从 Struts 2 中的参数列表中排除提交操作?

java - 使用 spring 部署应用程序后如何启动 ActiveMQ messageListener?