【发布时间】:2020-03-30 13:59:28
【问题描述】:
我最近接受了有关如何在启动应用程序时在命令行上使用 --<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) 中定义的值。
我是否使用了错误的语法来进行覆盖?是否不可能覆盖在复杂数据结构中定义的项目?如果有人可以提供帮助,将不胜感激。
【问题讨论】:
-
可以提供json格式的[docs.spring.io/spring-boot/docs/current/reference/html/…配置):
java -jar myapp.jar --spring.application.json='{"name":"test"}' -
您能指出任何特定的部分吗?我要寻找什么?
-
抱歉,我在格式化评论时遇到了问题。我在link 中添加了一个锚点。这是示例:
java -jar myapp.jar --spring.application.json='{"name":"test"}'。我从未将它用于复杂的结构,但您可以检查它是否适用于您的配置。 -
你能用 YAML 代替 JSON 吗?
-
我了解链接中信息所描述的概念,但它似乎没有涵盖像我正在使用的地图这样更复杂的结构。奇怪的是,它知道如何解析 YAML 并填充 java 对象,但是当您尝试覆盖时它似乎不起作用。我会尝试看看我是否可以让 JSON 工作。
标签: spring-boot configuration yaml