Files
full/module/base/mgt/internal/config/config.go

51 lines
1.5 KiB
Go
Raw Normal View History

package config
import (
"git.apinb.com/bsm-sdk/core/conf"
"git.apinb.com/bsm-sdk/core/env"
)
var (
Spec SrvConfig
)
type SrvConfig struct {
conf.Base `yaml:",inline"`
Databases *conf.DBConf `yaml:"Databases"`
Rpc map[string]conf.RpcConf `yaml:"Rpc"`
Apm *conf.ApmConf `yaml:"APM"`
Etcd *conf.EtcdConf `yaml:"Etcd"`
SecretKey string
// InitRootUser 是否初始化超级管理员用户;未配置时默认 true
InitRootUser *bool `yaml:"InitRootUser,omitempty"`
}
// InitRootUserEnabled 是否执行 root 用户初始化
func InitRootUserEnabled() bool {
if Spec.InitRootUser == nil {
return false
}
return *Spec.InitRootUser
}
func New(srvKey string) {
// 初始化通用配置 创建一个新的配置实例,用于服务配置
conf.New(srvKey, &Spec)
// 配置校验 服务端口如果不合规,则随机分配端口
Spec.Port = conf.CheckPort(Spec.Port)
// 初始化自定义环境变量
Spec.SecretKey = env.Runtime.JwtSecretKey
// InitRootUser 配置说明:
// 由于bool类型零值是false如果配置文件中未设置该字段默认值为false
// 为了保持向后兼容和默认启用初始化,我们采用以下策略:
// - 如果配置文件中显式设置为false则禁用初始化
// - 如果配置文件中未设置或设置为true则启用初始化
// 注意InitRootUserData函数内部已有幂等性检查重复执行是安全的
// 配置校验 服务名称地址及监听地址不能为空
conf.NotNil(Spec.Service, Spec.Cache)
}