我们遇到这样一种情况:多个scrum团队使用springbootms将一个共享的配置文件加载到数据库中,这个文件正在增长&变得不可维护。所以我们想把这个配置文件分解成多个文件。尽管每个文件将使用相同的模式和结构。
当配置文件都在一个文件中时,spring boot ms将其加载到对象模型中,对象模型是pojo使用@configurationproperties注解表示配置文件结构的。
下面是一个示例配置文件供参考-
{
"app-config": {
"consumers": [
{
"username": "Consumer-Name",
"credentials": {
"type": "credentials_type",
"properties": {
"client_id": "client_id",
"client_secret": "client_secret",
"name": "client_name"
}
}
}
],
"plugins": [
{
"config.host": "fluentd",
"config.port": "5170",
"config.timeout": "10000",
"name": "tcp-log"
},
{
"config.generator": "uuid",
"config.header_name": "CorrelationId",
"name": "correlation-id"
}
],
"services": [
{
"properties": {
"name": "Service-Name",
"url": "https://Service-URL"
}
}
]
}
}
下面是将配置加载到pojo中的示例代码-
@Component
@ConfigurationProperties(prefix = "app-config")
@RefreshScope
@Validated
public class Config {
@NotNull @NotEmpty
private List<ServiceConfig> services;
private List<ConsumerConfig> consumers;
private List<Map<String, String>> plugins;
public List<ServiceConfig> getServices() {
return services;
}
public void setServices(List<ServiceConfig> services) {
this.services = services;
}
public List<ConsumerConfig> getConsumers() {
return consumers;
}
public void setConsumers(List<ConsumerConfig> consumers) {
this.consumers = consumers;
}
public List<Map<String, String>> getPlugins() {
return plugins;
}
public void setPlugins(List<Map<String, String>> plugins) {
this.plugins = plugins;
}
}
正如您在上面的示例配置文件中所看到的,它捕获了不同团队/项目的使用者、服务和插件列表,因此当不同团队添加各自的配置时,该文件会增长。其思想是将config分解为多个文件,以便其更易于维护。
这是供参考的简化示例配置&实际配置更为复杂,具有复杂的对象层次结构。尽管就这个问题而言,这个配置文件的结构/模式的复杂性并不重要。
有谁能建议我们如何加载多个配置文件,遵循spring boot ms中相同的模式和结构,以便它仍然聚合,就好像它是从单个配置文件加载到单个pojo- public class Config
,如上所述?
暂无答案!
目前还没有任何答案,快来回答吧!