在Spring Boot中针对特定配置文件自定义属性文件

10
我想确认Spring Boot是否支持使用配置文件,而不仅限于`application.properties`文件。例如:可以是特定于配置文件的文件,如`my-custom.properties`,并且可以是特定于配置文件的文件,例如:
  1. 用于dev配置文件的`my-custom-dev.properties`
  2. 用于uat配置文件的`my-custom-uat.properties`
编辑:问题是我有普通的`application-{env}.property`文件,除此之外,还有其他属性文件与其数据内容相符(例如:用于日志记录的DB特定属性,我希望将其存储在`db-log.properties`中),如何使其他文件具有配置文件的敏感性?

2
这在Spring Boot参考指南中有解释。简而言之,添加--spring.config.name=application,file1,file2,这将指示Spirng Boot(可选)检测默认文件旁边的file1.propertiesfile1-{profile}.properties - M. Deinum
我在application.properties中添加了spring.config.import,指向file1.yaml。但是,当我激活dev配置文件时,它不会查找file1-dev.yaml。这表明自动将配置文件附加到自定义yaml名称上是行不通的。我的理解正确吗? - Nick Wills
6个回答

6

您可以在活动配置文件中使用它

@Configuration
@PropertySource("classpath:my-custom-${spring.profiles.active}.properties")

3
这不会按照你想的那样起作用。 spring.profiles.active 是一个数组而不是单个元素。你可以同时启用多个配置文件。那么这样做就行不通了,因为它将寻找名为 my-custom-[profile1,profile2].properties 的文件。我几乎无法想象这是实际的文件名。 - M. Deinum

2
除了application.properties文件之外,
可以使用以下约定定义特定于配置文件的属性:application-{profile}.properties。
环境具有一组默认配置文件(默认情况下为[default]),如果没有设置活动配置文件,则使用这些配置文件(换句话说,如果没有明确激活配置文件,则会加载来自application-default.properties的属性)。
要运行多个配置文件:
1. application-prod.properties
2. application-dev.properties
"Original Answer"翻译成"最初的回答"。
mvn spring-boot:run -Dspring-boot.run.profiles=dev,prod

3.应用程序属性文件(默认配置)

mvn spring-boot:run

4. 使用自定义属性文件的命令行参数

spring.config.name - 设置配置文件名称(逗号分隔的值) spring.config.location - 设置Spring Boot将查找外部化配置文件的位置。


注:Original Answer 翻译成"最初的回答"
java -jar hello-world.jar --spring.config.name=application,conf --spring.config.location=classpath:/external/properties/,classpath:/com/learn/../../

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties


当您以这种方式激活多个配置文件时,属性文件的顺序是否是确定性的(如果您为同一属性赋予不同的值)? - herman

1

除了application.properties文件外,您还可以定义任意数量的application-{profile}.properties文件。 在启动时,选择的文件由您选择的配置文件确定。


0

是的,Spring Boot可以帮助你实现这个。

通过使用spring.config.import属性,让Spring为你管理不同的属性文件,例如:

#application.properties   
spring.config.import=./my-custom.properties

假设my-custom.properties文件与application.properties在同一目录下。这样,Spring也将能够为您的自定义属性文件管理不同的配置文件,即如果您有“dev”配置文件激活,则会为您加载my-custom-dev.properties。
请参见docs

0

Spring 框架默认使用 application-.properties 命名规则。如果当前配置为 dev,则会查找 application-dev.properties 文件。

您也可以使用 bootstrap.properties 文件,并指定 spring.application.name=my-custom。

在这种情况下,Spring 会查找 my-custom.properties 文件,并且您可以将其与 dev、uat 配置文件一起使用,因此属性文件名应为 my-custom-dev.properties。

另外,您也可以将配置文件作为命令行参数传递给应用程序,如:-Dspring.config.location=文件路径。


0

是的,绝对没问题。只需要在启动时提供您想要的配置文件即可。
例如:

-Dspring.profiles.active=prod 

将使用application-prod.properties文件

-Dspring.profiles.active=customer

将使用应用程序自定义属性文件


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接