package impl import ( "errors" "git.apinb.com/bsm-sdk/core/cache/redis" "git.apinb.com/bsm-sdk/core/logger" "git.apinb.com/bsm-sdk/core/types" "git.apinb.com/bsm-sdk/core/vars" "git.apinb.com/bsm-sdk/core/with" "git.apinb.com/ops/files/internal/config" "git.apinb.com/ops/files/internal/storage" "git.apinb.com/ops/files/internal/storage/factory" clientv3 "go.etcd.io/etcd/client/v3" "gorm.io/gorm" ) var ( RedisService *redis.RedisClient EtcdService *clientv3.Client DBService *gorm.DB StorageService storage.Backend Logger *logger.Logger ) // NewImpl 初始化各类服务实例。 func NewImpl() { DBService = with.Databases(config.Spec.Databases, &types.SqlOptions{ MaxIdleConns: vars.SqlOptionMaxIdleConns, MaxOpenConns: vars.SqlOptionMaxOpenConns, ConnMaxLifetime: vars.SqlOptionConnMaxLifetime, LogStdout: false, Debug: false, }) var err error StorageService, err = factory.New(config.Spec.Storage) if err != nil { panic(err) } RedisService = with.RedisCache(config.Spec.Cache) EtcdService = with.Etcd(config.Spec.Etcd) logger.New(nil) } // Close 关闭数据库、Redis 和 Etcd 连接。 func Close() error { var closeErrors []error if DBService != nil { if sqlDB, err := DBService.DB(); err != nil { closeErrors = append(closeErrors, err) } else if err := sqlDB.Close(); err != nil { closeErrors = append(closeErrors, err) } } if RedisService != nil && RedisService.Client != nil { if err := RedisService.Client.Close(); err != nil { closeErrors = append(closeErrors, err) } } if EtcdService != nil { if err := EtcdService.Close(); err != nil { closeErrors = append(closeErrors, err) } } return errors.Join(closeErrors...) }