我在不同的文件夹中有多个 yml 文件。文件夹中的所有文件共享我使用 java bean 映射的相同属性结构。
在运行时,通过工厂,我想用运行时选择的特定文件的值填充正确的 bean。我怎么做?
谢谢
我在不同的文件夹中有多个 yml 文件。文件夹中的所有文件共享我使用 java bean 映射的相同属性结构。
在运行时,通过工厂,我想用运行时选择的特定文件的值填充正确的 bean。我怎么做?
谢谢
@ConfigurationProperties 注解或它背后的机制被构建用于在启动时配置应用程序,而不是在运行时加载数据。
我相信你可以在运行时以某种方式启动迷你弹簧环境,只是为了使用不同的弹簧配置文件读取这些数据(例如,spring-cloud-configserver 加载属性的方式),但这似乎不正确,还有更好的选择。
例如,如果您需要在运行时加载该数据,您可以使用杰克逊的 yamlfactory,这样您就可以在 3-4 个语句中读取数据。一个很好的例子在这里:https ://www.baeldung.com/jackson-yaml 。
考虑一个像这样的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”中获取它。
重要 - 在加载所有属性后,您必须决定默认属性是什么。