Spring 具有外部属性的启动配置文件
Spring boot profiles with external properties
我想在 spring 引导中设置 3 个配置文件:生产、开发、测试使用外部配置文件。
申请class:
@SpringBootApplication
public class Application {
public static void main(String[] args){
SpringApplication.run( Application.class, args );
}
}
AppConfig class:
@Configuration
@PropertySources({
@PropertySource("config/application.yml"),
@PropertySource(value = "file:${external.config}")
})
@ConfigurationProperties
public class AppConfig {
}
config/application.yml:
---
spring.profiles: production
endpoints.enabled: false
---
spring.profiles: development,test
endpoints.enabled: true
info.version: @project.version@
info.test: Test dev or test
info.profile: ${spring.profiles.active}
---
external.config: ${user.home}/.myapp/application.properties
.myapp/application.属性:
spring.profiles.active=production
info.version=5
spring-boot-actuator /info
的输出
{
version: "5",
test: "Test dev or test",
profile: "production"
}
预期输出:
404 because of the endpoints.enabled: false
spring-boot-actuator /env
spring.profiles.active: "production"
您可能应该在 application.yml 文件前加上 classpath:
无论如何,为什么不直接在java配置中使用spring配置文件来驱动配置呢? IMO,这会更干净,并且会使您的属性更加类型安全和重构友好,并且不容易出现拼写错误。
更新:
根据文档,您无法加载带有 @PropertySource
注释的 yml 文件:
因此,如果您需要使用文件,则需要使用普通属性文件。您可以使用显示 属性 的特定应用程序属性文件 here。
In addition to application.properties files, profile-specific
properties can also be defined using the naming convention
application-{profile}.properties.
我想在 spring 引导中设置 3 个配置文件:生产、开发、测试使用外部配置文件。
申请class:
@SpringBootApplication
public class Application {
public static void main(String[] args){
SpringApplication.run( Application.class, args );
}
}
AppConfig class:
@Configuration
@PropertySources({
@PropertySource("config/application.yml"),
@PropertySource(value = "file:${external.config}")
})
@ConfigurationProperties
public class AppConfig {
}
config/application.yml:
---
spring.profiles: production
endpoints.enabled: false
---
spring.profiles: development,test
endpoints.enabled: true
info.version: @project.version@
info.test: Test dev or test
info.profile: ${spring.profiles.active}
---
external.config: ${user.home}/.myapp/application.properties
.myapp/application.属性:
spring.profiles.active=production
info.version=5
spring-boot-actuator /info
的输出{
version: "5",
test: "Test dev or test",
profile: "production"
}
预期输出:
404 because of the endpoints.enabled: false
spring-boot-actuator /env
spring.profiles.active: "production"
您可能应该在 application.yml 文件前加上 classpath:
无论如何,为什么不直接在java配置中使用spring配置文件来驱动配置呢? IMO,这会更干净,并且会使您的属性更加类型安全和重构友好,并且不容易出现拼写错误。
更新:
根据文档,您无法加载带有 @PropertySource
注释的 yml 文件:
因此,如果您需要使用文件,则需要使用普通属性文件。您可以使用显示 属性 的特定应用程序属性文件 here。
In addition to application.properties files, profile-specific properties can also be defined using the naming convention application-{profile}.properties.