我在IntelliJ上有一个Serenity-BDD项目,带有Serenity-Spring和多个.properties文件,一个用于显示每个部署环境(dev,qa,生产),一个基本的.properties文件包含本地主机的变量。
test.properties
test-dev.properties
test-qa.properties
test-prod.properties
我在CLI命令(-Denvironment)中传递了一个参数,以选择将覆盖基址的.properties文件。
./gradlew build -Denvironment
在我的@PropertiesSource中,我列出了两个文件,其中包含用于覆盖文件的环境变量:
@PropertySource(value = {"test.properties", "test-${environment}.properties"}, ignoreResourceNotFound = true)
但是,当我通过IntelliJ在本地运行此命令(意味着没有-Denvironment变量,意味着localhost,并且仅需要test.properties文件)时,我的输出出现以下错误:
INFO:无法解析属性位置[test-$ {environment} .properties]:无法解析值“ test-$ {environment} .properties”中的占位符“ environment”
此错误究竟是什么?解决该错误的最佳方法是什么?
答案 0 :(得分:1)
当您硬编码加载两个属性文件的事实时,我将使用Spring SpEL默认值机制:
@PropertySource(value = {"test.properties", "test-${environment:local}.properties"})
这样,当没有环境可用时,Spring将加载 test.properties 和 test-local.properties 。
通常,您有 [test-$ {environment} .properties]无法解决错误,因为占位符在加载PropertySources
之前已解决(如果您认为这是逻辑,关于它)。
此外,ignoreResourceNotFound = true
容易出错,我不建议在生产代码中使用它。
如果仅使用一个文件,则可以使用
@PropertySource("${environment:local}.properties")
这是Spring将要加载的内容