【发布时间】:2017-02-16 16:26:35
【问题描述】:
我们正在使用 Spring Boot 应用程序,其中属性从 application.yml 文件而不是 application.properties 加载,位于 src/main/resources/,如下所示:
config:
host: localhost:8080
server: 123
他们被拉入一个像这样的.java文件
@ConfigurationProperties( prefix="config")
public class ConnectionImpl implements Connection{
@Value("${config.host}")
private Stringhost;
}
我可以通过这种方式检索属性。
但是我们正在尝试将配置属性从application.yml 移动到位于不同位置的不同.yml 文件。 (src/main/resources/env-config)。
现在我无法以相同的方式检索属性,即使用 @Value 注释。我还需要添加其他注释吗?
【问题讨论】:
-
您需要同时加载两个 yaml 属性还是在不同的环境中加载 - 例如。开发/测试/生产环境?另外,您需要配置属性还是可以使用属性源?例如。 @PropertySource("classpath:${some.file.name}.yaml") - 这样您就可以在 java 命令行启动调用中使用操作系统环境变量 SOME_FILE_NAME 或 -Dsome.file.name= 之类的参数。跨度>
-
我们同时需要两者。我们需要配置属性。
-
在这种情况下,我需要混合多个属性文件 + 环境变量。例如,我有一个“jms.
.yaml”和一个“db. .yaml”,甚至还有一个“utils. .yaml”。这些文件中的每一个都有一个用 @PropertySource("classpath:/com/${my.path:default/path}/db.${env:local}.properties") 注释的 pojo - 您可以使用 -Dmy 覆盖它.path=path/to/yaml/files 和 -Denv=dev 在命令行中 - 因此,如果您将 yaml 打包到 jar 中,它会在那里找到道具,但如果您需要将其更改为文件系统上的 yaml 文件, 你也可以在那里覆盖它。 -
抱歉,我用 PropertiesSource 回答了,但您也应该可以使用 ConfigurationProperties 来代替,使用相同的模型,它会自动为您构建 Spring Boot。
标签: java spring-boot properties configuration yaml