1 Star 1 Fork 0

flash520/utils

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
db.go 1.47 KB
一键复制 编辑 原始数据 按行查看 历史
/**
* @Author: koulei
* @Description:
* @File: db
* @Version: 1.0.0
* @Date: 2021/8/26 17:49
*/
package gf
import (
"errors"
"io/fs"
"os"
"path/filepath"
"strings"
"sync"
log "github.com/sirupsen/logrus"
"github.com/spf13/viper"
"gorm.io/gorm"
"gitee.com/flash520/utils/container"
"gitee.com/flash520/utils/mysql"
)
const (
mysqlClient string = "MysqlClient"
)
var (
mutex sync.Mutex
)
func DB(loglevel string, maxConn ...int) *gorm.DB {
mutex.Lock()
defer func() { mutex.Unlock() }()
c := container.CreateContainersFactory()
r := c.Get(mysqlClient)
if r == nil {
log.Debug("新建数据库对象")
if rds, err := newDB(strings.ToUpper(loglevel), maxConn...); err != nil {
return nil
} else {
c.Set(mysqlClient, rds)
return rds
}
}
log.Debug("缓存获取数据库对象")
rds := r.(*gorm.DB)
return rds
}
func newDB(loglevel string, conn ...int) (*gorm.DB, error) {
var config string
err := filepath.Walk("./", func(path string, info fs.FileInfo, err error) error {
if strings.Contains(path, "config.yml") {
config = path
}
return nil
})
if err != nil {
os.Exit(1)
}
v := viper.New()
v.SetConfigFile(config)
err = v.ReadInConfig()
if err != nil {
panic(err)
}
r := mysql.CreateMysql(
v.GetString("mysql.hosts"),
v.GetString("mysql.username"),
v.GetString("mysql.password"),
v.GetString("mysql.dbname"), loglevel,
conn...).GetConn()
if r == nil {
return nil, errors.New("数据库初始化失败")
}
return r, nil
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/flash520/utils.git
git@gitee.com:flash520/utils.git
flash520
utils
utils
v1.6.5

搜索帮助