update
This commit is contained in:
@@ -10,6 +10,8 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
const DefaultKey = "default"
|
||||
|
||||
var (
|
||||
DefaultConfig = &Config{
|
||||
Dsn: "root:root@tcp(127.0.0.1:3306)/?loc=Local&charset=utf8mb4&parseTime=true",
|
||||
@@ -20,12 +22,14 @@ var (
|
||||
Debug: true,
|
||||
GormLogger: gormLogger.Default.LogMode(gormLogger.Info),
|
||||
}
|
||||
|
||||
instanceMap = make(map[string]*MyDB)
|
||||
)
|
||||
|
||||
type (
|
||||
MyDB struct {
|
||||
DB *gorm.DB
|
||||
SqlDB *sql.DB
|
||||
db *gorm.DB
|
||||
sqlDb *sql.DB
|
||||
}
|
||||
Config struct {
|
||||
Dsn string
|
||||
@@ -38,7 +42,27 @@ type (
|
||||
}
|
||||
)
|
||||
|
||||
func New(config *Config) (*MyDB, error) {
|
||||
func Instance(key ...string) *MyDB {
|
||||
var key0 string
|
||||
|
||||
if len(key) > 0 {
|
||||
key0 = key[0]
|
||||
} else {
|
||||
key0 = DefaultKey
|
||||
}
|
||||
|
||||
instance, ok := instanceMap[key0]
|
||||
if !ok {
|
||||
panic(fmt.Errorf("%s not config", key))
|
||||
}
|
||||
return instance
|
||||
}
|
||||
|
||||
func NewDefault(config *Config) (*MyDB, error) {
|
||||
return New(DefaultKey, config)
|
||||
}
|
||||
|
||||
func New(key string, config *Config) (*MyDB, error) {
|
||||
var (
|
||||
maxLifeTime, _ = time.ParseDuration(DefaultConfig.MaxLifeTime)
|
||||
maxIdleTime, _ = time.ParseDuration(DefaultConfig.MaxIdleTime)
|
||||
@@ -92,10 +116,13 @@ func New(config *Config) (*MyDB, error) {
|
||||
sqlDb.SetMaxIdleConns(config.MaxIdleConn)
|
||||
sqlDb.SetConnMaxLifetime(maxLifeTime)
|
||||
sqlDb.SetConnMaxIdleTime(maxIdleTime)
|
||||
return &MyDB{
|
||||
DB: db,
|
||||
SqlDB: sqlDb,
|
||||
}, nil
|
||||
|
||||
myDb := &MyDB{
|
||||
db: db,
|
||||
sqlDb: sqlDb,
|
||||
}
|
||||
instanceMap[key] = myDb
|
||||
return myDb, nil
|
||||
}
|
||||
|
||||
func DefaultGormLogger(level gormLogger.LogLevel) gormLogger.Interface {
|
||||
@@ -113,7 +140,15 @@ func NewGormLogger(writer gormLogger.Writer, gormLoggerConfig gormLogger.Config)
|
||||
}
|
||||
|
||||
func (m *MyDB) Close() {
|
||||
if m.SqlDB != nil {
|
||||
m.SqlDB.Close()
|
||||
if m.sqlDb != nil {
|
||||
m.sqlDb.Close()
|
||||
}
|
||||
}
|
||||
|
||||
func (m *MyDB) DB() *gorm.DB {
|
||||
return m.db
|
||||
}
|
||||
|
||||
func (m *MyDB) SqlDB() *sql.DB {
|
||||
return m.sqlDb
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
)
|
||||
|
||||
func TestMysql(t *testing.T) {
|
||||
myDB, err := New(&Config{
|
||||
myDB, err := NewDefault(&Config{
|
||||
Dsn: "root:root@tcp(127.0.0.1:3306)/site?loc=Local&charset=utf8mb4&writeTimeout=3s&readTimeout=3s&timeout=2s&parseTime=true",
|
||||
MaxOpenConn: 16,
|
||||
MaxIdleConn: 4,
|
||||
@@ -23,7 +23,7 @@ func TestMysql(t *testing.T) {
|
||||
defer myDB.Close()
|
||||
|
||||
var res = make(map[string]interface{})
|
||||
err = myDB.DB.Table("image").Limit(1).Take(&res).Error
|
||||
err = myDB.db.Table("image").Limit(1).Take(&res).Error
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user