cn.foxtech.common.entity.manager.EntityConfigInitializer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fox-edge-server-common-entity-service Show documentation
Show all versions of fox-edge-server-common-entity-service Show documentation
fox-edge-server-common-entity-service
The newest version!
/* ----------------------------------------------------------------------------
* Copyright (c) Guangzhou Fox-Tech Co., Ltd. 2020-2024. All rights reserved.
* --------------------------------------------------------------------------- */
package cn.foxtech.common.entity.manager;
import cn.foxtech.common.entity.constant.ConfigVOFieldConstant;
import cn.foxtech.common.entity.entity.ConfigEntity;
import cn.foxtech.common.utils.file.FileTextUtils;
import cn.foxtech.common.utils.json.JsonUtils;
import cn.foxtech.core.exception.ServiceException;
import org.springframework.core.io.ClassPathResource;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
/**
* 程序启动的时候,初始化全局配置参数的基础类
* 背景:
* 用户开发的程序,在启动的时候,想要想要用初始化文件向管理服务异步注册初始化参数。
* 当管理服务接受注册请求后,管理服务会有出现配置参数,那么用户就可以在管理服务的界面照猫画虎,进行修改配置了。
* 当用户在管理服务那边修改之后,那么本服务启动后,会优先使用用户用户在管理服务那边的手动配置
*/
public abstract class EntityConfigInitializer {
private final Map defaultConfigs = new HashMap<>();
public abstract RedisConsoleService getLogger();
public abstract EntityServiceManager getEntityManageService();
public abstract InitialConfigNotifier getInitialConfigNotifier();
public abstract String getFoxServiceType();
public abstract String getFoxServiceName();
/**
* 获得运行期的配置信息
*
* @param configName 配置名称
* @return 配置表
*/
public Map getConfigParam(String configName) {
// 取出该配置的信息
Map defaultConfig = (Map) this.defaultConfigs.getOrDefault(configName, new HashMap<>());
// 取出本服务提供的缺省配置
Map configValue = new HashMap<>();
configValue.putAll((Map) defaultConfig.getOrDefault(ConfigVOFieldConstant.field_config_value, new HashMap<>()));
// 取出管理服务提供的用户配置
ConfigEntity configEntity = this.getEntityManageService().getConfigEntity(this.getFoxServiceName(), this.getFoxServiceType(), configName);
if (configEntity == null) {
return configValue;
}
// 如果能取到,那么合并用户的配置值
configValue.putAll(configEntity.getConfigValue());
return configValue;
}
public Object getConfigValue(String configName, String configValueItem) {
// 取出管理服务提供的用户配置
ConfigEntity configEntity = this.getEntityManageService().getConfigEntity(this.getFoxServiceName(), this.getFoxServiceType(), configName);
if (configEntity != null) {
return configEntity.getConfigValue().get(configValueItem);
}
// 取出该配置的信息
Map defaultConfig = (Map) this.defaultConfigs.getOrDefault(configName, new HashMap<>());
Map configValue = (Map) defaultConfig.getOrDefault(ConfigVOFieldConstant.field_config_value, new HashMap<>());
return configValue.get(configValueItem);
}
/**
* 从resource下的json文件中装载缺省的配置参数,从管理服务中装载用户的配置参数,并合并成一个启动参数
*
* @param configName 配置名称
* @param classpathFile resource下的json文件
*/
public void initialize(String configName, String classpathFile) {
try {
Map defaultConfig = (Map) this.defaultConfigs.get(configName);
// 从配置文件中,读取缺省的配置参数
if (defaultConfig == null) {
ClassPathResource classPathResource = new ClassPathResource(classpathFile);
InputStream inputStream = classPathResource.getInputStream();
String json = FileTextUtils.readTextFile(inputStream, StandardCharsets.UTF_8);
defaultConfig = JsonUtils.buildObject(json, Map.class);
this.defaultConfigs.put(configName, defaultConfig);
}
// 填写该信息:通知管理服务,添加该配置作为缺省配置
this.getInitialConfigNotifier().notifyRegisterConfig(configName, defaultConfig);
// 取出管理服务通告的配置信息
Map systemConfig = this.getConfigParam(configName);
// 通过合并两者信息,获得配置参数
Map configValue = new HashMap<>();
configValue.putAll((Map) defaultConfig.getOrDefault(ConfigVOFieldConstant.field_config_value, new HashMap<>()));
configValue.putAll(systemConfig);
} catch (Exception e) {
if (this.getLogger() != null) {
this.getLogger().error(e.getMessage());
}
throw new ServiceException(e.getMessage());
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy