[英]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.