Files
files/internal/impl/impl.go
2026-09-09 16:42:21 +08:00

69 lines
1.7 KiB
Go

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...)
}