snippet/mysql/mysql.go

71 lines
1.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package mysql
import (
"errors"
"time"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
"gorm.io/plugin/dbresolver"
)
var (
_db *gorm.DB
_conf *Config
)
type Config struct {
ConnString string
ConnMaxLifetime int64 //ConnMaxLifetime 最大连接时间,单位:小时
MaxIdleConns int
MaxOpenConns int
}
//Init mysql初始化
func Init(config *Config) {
if config == nil {
config = &Config{
ConnString: "root:root@tcp(127.0.0.1:3306)/sample?charset=utf8&parseTime=True&loc=Local",
ConnMaxLifetime: 1,
MaxIdleConns: 10,
MaxOpenConns: 100,
}
}
_conf = config
}
//New 创建实例
func New() (*gorm.DB, error) {
if _db != nil {
return _db, nil
}
if _conf == nil {
return nil, errors.New("组件未初始化请执行Init")
}
var err error
_db, err = gorm.Open(mysql.Open(_conf.ConnString), &gorm.Config{
SkipDefaultTransaction: true,
Logger: logger.Default.LogMode(logger.Silent),
NamingStrategy: schema.NamingStrategy{
SingularTable: true,
},
})
if err != nil {
return nil, err
}
_db.Use(
dbresolver.Register(dbresolver.Config{
Sources: []gorm.Dialector{mysql.Open(_conf.ConnString)},
Replicas: []gorm.Dialector{mysql.Open(_conf.ConnString)},
Policy: dbresolver.RandomPolicy{},
}).SetConnMaxIdleTime(time.Hour).
SetConnMaxLifetime(time.Duration(_conf.ConnMaxLifetime) * time.Hour).
SetMaxIdleConns(_conf.MaxIdleConns).
SetMaxOpenConns(_conf.MaxOpenConns))
return _db, nil
}