Add configuration merge service

This commit is contained in:
2025-06-23 12:03:56 +08:00
parent d6dd34db87
commit 4f8272e290
16 changed files with 627 additions and 208 deletions

View File

@@ -25,6 +25,8 @@ type ConfigService struct {
// 配置通知服务
notificationService *ConfigNotificationService
// 配置迁移服务
migrationService *ConfigMigrationService[*models.AppConfig]
}
// ConfigError 配置错误
@@ -65,16 +67,18 @@ func NewConfigService(logger *log.LoggerService, pathManager *PathManager) *Conf
// 使用"."作为键路径分隔符
k := koanf.New(".")
notificationService := NewConfigNotificationService(k, logger)
migrationService := NewAppConfigMigrationService(logger, pathManager)
// 构造配置服务实例
service := &ConfigService{
koanf: k,
logger: logger,
pathManager: pathManager,
koanf: k,
logger: logger,
pathManager: pathManager,
notificationService: notificationService,
migrationService: migrationService,
}
// 初始化配置通知服务
service.notificationService = NewConfigNotificationService(k, logger)
// 初始化配置
if err := service.initConfig(); err != nil {
panic(err)
@@ -108,12 +112,25 @@ func (cs *ConfigService) initConfig() error {
return cs.createDefaultConfig()
}
// 配置文件存在,直接加载
// 配置文件存在,先加载现有配置
cs.fileProvider = file.Provider(configPath)
if err := cs.koanf.Load(cs.fileProvider, jsonparser.Parser()); err != nil {
return &ConfigError{Operation: "load_config_file", Err: err}
}
// 检查并执行配置迁移
if cs.migrationService != nil {
result, err := cs.migrationService.MigrateConfig(cs.koanf)
if err != nil {
return &ConfigError{Operation: "migrate_config", Err: err}
}
if result.Migrated && result.ConfigUpdated {
// 迁移完成且配置已更新,重新创建文件提供器以监听新文件
cs.fileProvider = file.Provider(configPath)
}
}
return nil
}
@@ -176,7 +193,7 @@ func (cs *ConfigService) GetConfig() (*models.AppConfig, error) {
defer cs.mu.RUnlock()
var config models.AppConfig
if err := cs.koanf.Unmarshal("", &config); err != nil {
if err := cs.koanf.UnmarshalWithConf("", &config, koanf.UnmarshalConf{Tag: "json"}); err != nil {
return nil, &ConfigError{Operation: "unmarshal_config", Err: err}
}