Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @ConfigurationProperties在以编程方式添加活动配置文件后重新加载_Java_Spring_Spring Boot_Javabeans_Configurationproperties - Fatal编程技术网

Java @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注释的类

@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文件中定义了相同的属性键
另外一种方法是始终使用配置文件,只需定义一个默认配置文件并显式加载它(--spring.profiles.active=default),并将您的内容保存在application-default.properties中

如果您想通过检查其他概要文件是否不存在来以编程方式定义活动概要文件,您可以实现一个,但这已经是一个相当高级的东西了