Spring boot 使用Spring引导在运行时加载Yml

Spring boot 使用Spring引导在运行时加载Yml,spring-boot,yaml,configurationproperties,Spring Boot,Yaml,Configurationproperties,我在不同的文件夹中有多个yml文件。文件夹中的所有文件共享我用JavaBean映射的相同属性结构 在运行时,使用工厂,我希望用运行时选择的特定文件的值填充正确的bean。我该怎么做 感谢@ConfigurationProperties注释或其背后的机制是为在启动时对应用程序进行配置而构建的,而不是在运行时加载数据 我相信您可以在运行时启动mini-spring环境,只是为了使用不同的spring配置文件读取这些数据(例如,spring cloud configserver加载属性的方式),但这似

我在不同的文件夹中有多个yml文件。文件夹中的所有文件共享我用JavaBean映射的相同属性结构

在运行时,使用工厂,我希望用运行时选择的特定文件的值填充正确的bean。我该怎么做


感谢@ConfigurationProperties注释或其背后的机制是为在启动时对应用程序进行配置而构建的,而不是在运行时加载数据

我相信您可以在运行时启动mini-spring环境,只是为了使用不同的spring配置文件读取这些数据(例如,spring cloud configserver加载属性的方式),但这似乎不正确,还有更好的选择


例如,如果您需要在运行时加载数据,您可以使用jackson的yamlfactory进行加载,这样您就可以在3-4条语句中读取数据。这里有一个很好的例子:。

考虑这样一个Bean:(伪代码,只是为了解释)

类MyConfigBean{
私有财产;
私有地图所有属性地图;
void loadAllProperties(){…}
void开关属性(字符串名称){
this.currentProperties=this.allPropertiesMap.get(名称);
}
字符串getProperty(字符串键){
返回此.currentProperties.get(键);
}
}
您可以将所有Yaml文件加载到bean中的映射中。映射的键可以是属性文件的“名称”,值可以是属性对象。 switchProperties(字符串名称)方法将“选择”您希望使用的属性文件。使用该名称,您将从映射中获取适当的Properties对象,并将其分配给“currentProperties”对象

这样,每次按键获取属性时,都会根据“切换”的对象从“currentProperties”中获取该属性。

重要信息-加载所有属性后,您必须确定默认属性。

是的,我最终使用了它!谢谢,请将答案标记为已接受:)谢谢!:)
class MyConfigBean {
   private Properties currentProperties;
   private Map<String, Properties> allPropertiesMap;

   void loadAllProperties() { ... }

   void switchProperties(String name) {
       this.currentProperties = this.allPropertiesMap.get(name);
   }

   String getProperty(String key) {
     return this.currentProperties.get(key);
   }
}