import_csv_datacenter/db_operate.go

82 lines
1.3 KiB
Go

package main
import (
"database/sql"
"errors"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var DbConnPools = make(map[string]*gorm.DB)
func setDb() (sql *sql.DB, err error) {
db, err = InstanceDb(c.Dns)
if err != nil {
fatal("数据库连接失败:%v", err)
}
return db.DB()
}
func InstanceDb(dns string) (*gorm.DB, error) {
var (
dbConn *gorm.DB
ok bool
)
if dbConn, ok = DbConnPools[dns]; ok {
sqlDB, _ := dbConn.DB()
connTest := sqlDB.Ping()
if connTest == nil {
return nil, nil
}
}
db, err := NewDb(&DbConfig{
DriverName: "mysql",
Dns: dns,
Debug: true,
})
if err != nil {
return nil, errors.New("s链接失败")
}
return db, nil
}
type DbConfig struct {
DriverName string
Dns string
Debug bool
MaxIdleConns int
}
func NewDb(config *DbConfig, opt ...gorm.Option) (gorm *gorm.DB, err error) {
gorm, err = config.Conn(opt...)
return gorm, err
}
func (m *DbConfig) Conn(opt ...gorm.Option) (*gorm.DB, error) {
dial := DriverMysql(m.Dns)
db, err := gorm.Open(
dial,
opt...,
)
if err != nil {
return nil, err
}
sqlDB, _ := db.DB()
if m.Debug {
db = db.Debug()
}
sqlDB.SetMaxIdleConns(3) // 设置最大空闲连接数
sqlDB.SetMaxOpenConns(10) // 设置最大打开连接数
return db, nil
}
func DriverMysql(dns string) gorm.Dialector {
return mysql.Open(dns + "")
}