Java @ConfigurationProperties在以编程方式添加活动配置文件后重新加载
我有一个用@ConfigurationProperties注释的类Java @ConfigurationProperties在以编程方式添加活动配置文件后重新加载,java,spring,spring-boot,javabeans,configurationproperties,Java,Spring,Spring Boot,Javabeans,Configurationproperties,我有一个用@ConfigurationProperties注释的类 @ConfigurationProperties @Configuration @DependsOn("AddDefaultProfile") public class MyProperties(){ .... } 我有几个配置文件是chrome、safari、ie和en_US、fr_CA等。 我正在运行的参数看起来像-Dspring.profiles.active=chrome,en_US 现在我想检查是否指定了语言,如果
@ConfigurationProperties
@Configuration
@DependsOn("AddDefaultProfile")
public class MyProperties(){
....
}
我有几个配置文件是chrome、safari、ie和en_US、fr_CA
等。
我正在运行的参数看起来像-Dspring.profiles.active=chrome,en_US
现在我想检查是否指定了语言,如果没有,我将使用environment.addActiveProfile(“en_US”)
向其添加默认语言。
问题是我的MyProperties无法重新加载。
通过调试,我可以看到环境在活动概要文件中有en_US,但propertySource仍然有旧概要文件
如何使用新配置文件重新加载MyProperties。您可以尝试调用此方法
WebApplicationContextUtils\initServletPropertySources(org.springframework.core.env.MutablePropertySources,javax.servlet.ServletContext,javax.servlet.ServletConfig)
,但我不确定这在spring boot中是否有用,除此之外还有:
- application.properties(在任何情况下都会加载)
- application-abc.properties(仅当配置文件abc处于活动状态时加载)
@ConfigurationProperties
然而,这意味着在找到所有要加载的相关文件后,如何“准备”spring boot读取的实际键值,以便在应用程序中使用(例如,注入标有@ConfigurationProperties
的bean等)
因此,我想,您应该将默认设置放在application.properties
中,并将特定的内容配置到application-.properties
特定于概要文件的内容始终优先于默认内容,因此您将得到以下结果:
- 未指定配置文件时,将加载application.properties中的内容
- 指定概要文件时,实际值将从
加载,尽管application.properties文件中定义了相同的属性键application-.properties