1 Star 0 Fork 0

鹰厂长 / ycz

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
gdb.go 1.96 KB
一键复制 编辑 原始数据 按行查看 历史
chaitao 提交于 2023-08-09 13:07 . 数据库链接
package gdb
import (
"fmt"
"gitee.com/ycz-new/ycz/abs"
"github.com/spf13/viper"
"go.uber.org/zap"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"time"
)
var configKey = "datasource"
var _gorm = make(map[string]*gorm.DB)
type loggerConfig struct {
Level int `yaml:"level"`
}
type Option struct {
Username string `yaml:"username"`
Password string `yaml:"password"`
Url string `yaml:"url"`
Extra string `yaml:"extra"`
Logger loggerConfig `yaml:"logger"`
}
type OrmStarter struct {
}
func (m *OrmStarter) GetName() string {
return configKey
}
func (m *OrmStarter) Init(config *viper.Viper, starters abs.StarterList) {
if !config.IsSet(configKey) {
return
}
var opts map[string]Option
err := config.UnmarshalKey(configKey, &opts)
if err != nil {
panic("OrmStarter 配置异常: " + err.Error())
}
for name, opt := range opts {
dsn := fmt.Sprintf("%s:%s@%s?%s",
opt.Username,
opt.Password,
opt.Url,
opt.Extra,
)
starterLogger := starters["logger"].Instance().(*zap.SugaredLogger)
_logger := starterLogger.Named("").WithOptions(zap.AddCaller(), zap.AddCallerSkip(2))
newLogger := &GormNewLogger{
logger: _logger,
level: logger.LogLevel(opt.Logger.Level),
}
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: newLogger,
PrepareStmt: true,
SkipDefaultTransaction: true,
})
if err != nil {
panic("数据库初始化失败:" + err.Error())
}
{
sqlDB, err := db.DB()
if err != nil {
panic("数据库初始化连接数失败")
}
sqlDB.SetMaxIdleConns(20)
sqlDB.SetMaxOpenConns(200)
sqlDB.SetConnMaxLifetime(time.Hour)
}
_gorm[name] = db
}
}
func (m *OrmStarter) Instance(args ...interface{}) interface{} {
return _gorm
}
func Gorm(args ...string) *gorm.DB {
name := "default"
if len(args) > 0 {
name = args[0]
}
g, ok := _gorm[name]
if !ok {
panic("未发现数据库:" + name)
}
return g
}
Go
1
https://gitee.com/ycz-new/ycz.git
git@gitee.com:ycz-new/ycz.git
ycz-new
ycz
ycz
39e396945b70

搜索帮助