0

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

在运行时,通过工厂,我想用运行时选择的特定文件的值填充正确的 bean。我怎么做?

谢谢

4

2 回答 2

1

@ConfigurationProperties 注解或它背后的机制被构建用于在启动时配置应用程序,而不是在运行时加载数据。

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

例如,如果您需要在运行时加载该数据,您可以使用杰克逊的 yamlfactory,这样您就可以在 3-4 个语句中读取数据。一个很好的例子在这里:https ://www.baeldung.com/jackson-yaml 。

于 2020-12-14T15:03:04.960 回答
0

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

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);
   }
}

您可以将所有 Yaml 文件加载到 bean 中的 Map 中。Map 的键可以是属性文件的“名称”,值是属性对象。switchProperties(String name) 方法将“选择”您希望使用的属性文件。使用该名称,您将从 Map 中获取适当的 Properties 对象并将其分配给“currentProperties”对象。

这样,每次您按键获取属性时,都会根据您“切换”的内容从“currentProperties”中获取它。
重要 - 在加载所有属性后,您必须决定默认属性是什么。

于 2020-12-15T16:56:27.193 回答