package models import ( "errors" "fmt" "log" "time" "etcd/program/config" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mssql" ) var ( client *gorm.DB ) // InitClient 客户端创建 func InitClient(dbCfg *config.MySQLConfig) (err error) { if dbCfg == nil { err = errors.New("Config is nil") return } // 拼接连接数据库字符串 connStr := fmt.Sprintf("%s:%s@(%s:%d)/%s?charset=utf8&parseTime=True&loc=UTC", dbCfg.User, dbCfg.Passwd, dbCfg.Address, dbCfg.Port, dbCfg.DbName) // 连接数据库 db, err := gorm.Open("mysql", connStr) if err != nil { return } if dbCfg.Debug == true { db.Debug() } // 禁用表名多元化 db.SingularTable(true) // 连接池最大连接数 db.DB().SetMaxIdleConns(dbCfg.MaxIdleConns) // 默认打开连接数 db.DB().SetMaxOpenConns(dbCfg.MaxOpenConns) // 开启协程ping MySQL数据库查看连接状态 go func() { for { // ping err = db.DB().Ping() if err != nil { log.Println("pingdb error ", err) } // 间隔5s ping一次 time.Sleep(30 * time.Second) } }() // 全局变量 client = db return } func InitClientNew(dbCfg *config.MsSQLConfig) (err error) { if dbCfg == nil { err = errors.New("Config is nil") return } // 拼接连接数据库字符串 connStr := fmt.Sprintf("sqlserver://%s:%s@%s:%d?database=%s", dbCfg.User, dbCfg.Passwd,dbCfg.Address, dbCfg.Port, dbCfg.DbName) fmt.Println(connStr) // 连接数据库 db, err := gorm.Open("mssql", connStr) if err != nil { return } if dbCfg.Debug == true { db.Debug() } db.LogMode(true) db.CommonDB() // 开启协程ping MySQL数据库查看连接状态 go func() { for { // ping err = db.DB().Ping() if err != nil { log.Println("pingdb error ", err) } // 间隔5s ping一次 time.Sleep(30 * time.Second) } }() // 全局变量 client = db return }