PropertySource 可选用变量命名的属性文件覆盖默认值
PropertySource optional override default with variable-named properties file
我在 IntelliJ 上有一个带有 Serenity-Spring 和多个 .properties 文件的 Serenity-BDD 项目,一个用于显示每个部署环境(开发、质量检查、生产),以及一个基本 .properties 文件,其中包含本地主机的变量。
test.properties
test-dev.properties
test-qa.properties
test-prod.properties
我在 CLI 命令 (-Denvironment) 中将一个参数传递给 select 将覆盖基础的 .properties 文件。
./gradlew build -Denvironment
在我的@PropertiesSource 中,我列出了两个文件,以及覆盖文件的环境变量:
@PropertySource(value = {"test.properties", "test-${environment}.properties"}, ignoreResourceNotFound = true)
但是,当我通过 IntelliJ 在本地 运行 执行此操作时(意思是没有 -Denvironment 变量,意思是本地主机,并且只需要 test.properties 文件),我在输出中收到以下错误:
INFO: Properties location [test-${environment}.properties] not resolvable: Could not resolve placeholder 'environment' in value "test-${environment}.properties"
这个错误到底是什么,解决它的最佳方法是什么?
当您硬编码加载两个属性文件的事实时,我会使用 Spring SpEL 默认值机制:
@PropertySource(value = {"test.properties", "test-${environment:local}.properties"})
这样,当没有可用的环境时,Spring会加载test.properties和测试-local.properties.
出现 [test-${environment}.properties] not resolvable 错误是正常的,因为占位符在 PropertySources
加载之前被解析(这仔细想想是合乎逻辑的)。
此外,ignoreResourceNotFound = true
容易出错,我不建议在生产代码中使用它。
如果您只使用一个文件,您可以选择
@PropertySource("${environment:local}.properties")
这是Spring加载的内容:
- => local.properties
- -Denvironment=uat => uat.properties
- -Denvironment=prod => prod.properties
我在 IntelliJ 上有一个带有 Serenity-Spring 和多个 .properties 文件的 Serenity-BDD 项目,一个用于显示每个部署环境(开发、质量检查、生产),以及一个基本 .properties 文件,其中包含本地主机的变量。
test.properties
test-dev.properties
test-qa.properties
test-prod.properties
我在 CLI 命令 (-Denvironment) 中将一个参数传递给 select 将覆盖基础的 .properties 文件。
./gradlew build -Denvironment
在我的@PropertiesSource 中,我列出了两个文件,以及覆盖文件的环境变量:
@PropertySource(value = {"test.properties", "test-${environment}.properties"}, ignoreResourceNotFound = true)
但是,当我通过 IntelliJ 在本地 运行 执行此操作时(意思是没有 -Denvironment 变量,意思是本地主机,并且只需要 test.properties 文件),我在输出中收到以下错误:
INFO: Properties location [test-${environment}.properties] not resolvable: Could not resolve placeholder 'environment' in value "test-${environment}.properties"
这个错误到底是什么,解决它的最佳方法是什么?
当您硬编码加载两个属性文件的事实时,我会使用 Spring SpEL 默认值机制:
@PropertySource(value = {"test.properties", "test-${environment:local}.properties"})
这样,当没有可用的环境时,Spring会加载test.properties和测试-local.properties.
出现 [test-${environment}.properties] not resolvable 错误是正常的,因为占位符在 PropertySources
加载之前被解析(这仔细想想是合乎逻辑的)。
此外,ignoreResourceNotFound = true
容易出错,我不建议在生产代码中使用它。
如果您只使用一个文件,您可以选择
@PropertySource("${environment:local}.properties")
这是Spring加载的内容:
- => local.properties
- -Denvironment=uat => uat.properties
- -Denvironment=prod => prod.properties