繁体   English   中英

Spring Boot - 覆盖地图中包含的属性(YAML)

[英]Spring Boot - override property contained in a map (YAML)

我最近接受了有关如何在启动应用程序时在命令行上使用--<property>=<value>正确覆盖应用程序属性(在 application.yml 中定义)的教育。 到目前为止,这一直工作得很好。

现在我有一个存储在地图结构中的配置。 在内部(即从 application.yml 读取时)这按预期工作,但我在命令行上覆盖的尝试失败了。

以下是 application.yml 中的相关配置:

services-config:
  common:
    connectionTimeout: 30000
    requestTimeout: 30000
    socketTimeout: 60000
    defaultKeepAlive: 20000
    defaultMaxConnPerRoute: 10
    maxTotalConnections: 200
  services:
    ? mission-planner
    : { id: mission-planner, name: Mission Planner, host: localhost, port: 8443 }

因此, services是一个映射(或任何 YAML 调用它),由? 并且映射条目值是:之后的值。

在代码中,我可以轻松访问信息,如下所示:

ServiceConnectionProperties connProps = servicesConfig.getServices().get("mission-planner");
connProps.getHost();
connProps.getPort();

我曾希望我能够使用以下内容覆盖这些属性:

> java ... --services-config.services['mission-planner'].host=192.168.56.102 --services-config.services['mission-planner'].port=9400 ...

不幸的是,这似乎不起作用。 控制台日志表明主机/端口被设置为 application.yml (localhost:8443) 中定义的值。

我是否使用错误的语法进行覆盖? 是否无法覆盖在复杂数据结构中定义的项目? 如果有人可以提供帮助,将不胜感激。

好吧,我找到了让它工作的方法。 我不是 100% 确定它是“正确的”YAML 还是可能有其他更好的方法来做到这一点。

我更改了 YAML,如下所示:

services-config:
  common:
    connectionTimeout: 30000
    requestTimeout: 30000
    socketTimeout: 60000
    defaultKeepAlive: 20000
    defaultMaxConnPerRoute: 10
    maxTotalConnections: 200
  services:
    mission-planner:
      id: mission-planner
      name: Mission Planner
      host: localhost
      port: 8443

我可以按如下方式覆盖“mission-planner”配置:

> java ... --services-config.services.mission-planner.host=192.168.56.102 --services-config.services.mission-planner.port=9400 ...

这有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM