我有一个用@ConfigurationProperties注释的类。
@ConfigurationProperties
@Configuration
@DependsOn("AddDefaultProfile")
public class MyProperties(){
....
}
我有几个chrome, safari, ie, and en_US, fr_CA
等个人资料。
我正在运行的参数看起来像-Dspring.profiles.active=chrome, en_US
。
现在,我要检查是否指定了语言,如果没有指定,请使用environment.addActiveProfile("en_US")
向其中添加默认语言。
问题是我的MyProperties无法重新加载。
通过调试它,我可以看到环境在活动配置文件中具有en_US,但是propertySource仍然具有旧的配置文件。
如何使用新的个人资料重新加载MyProperties。
答案 0 :(得分:0)
您可以尝试调用此方法WebApplicationContextUtils#initServletPropertySources(org.springframework.core.env.MutablePropertySources, javax.servlet.ServletContext, javax.servlet.ServletConfig)
,但我不确定该方法是否有用
答案 1 :(得分:0)
在春季靴子中,还有其他一些东西:
这些是可以找到实际值的源文件。
@ConfigurationProperties
意味着在找到所有要加载的相关文件之后,如何“准备” spring-boot读取的实际键值以在应用程序中使用(例如,注入标记为的Bean) @ConfigurationProperties
等)
所以,我想,您应该将默认设置仅放在application.properties
中,并将特定内容配置到application-<profile>.properties
特定于个人资料的内容始终优先于默认内容,因此您将获得以下内容:
application-<profile>.properties
加载实际值
说了另一种方法是始终使用配置文件,只需定义一个默认配置文件并显式加载它(--spring.profiles.active = default)并将您的内容保存在 application-default.properties
如果您想通过检查其他配置文件不存在来以编程方式定义活动配置文件,则可以实施EnvironmentPostProcessor,但它已经是相当高级的东西