Files
eagle/internal/model/init.go
2020-09-13 22:09:04 +08:00

63 lines
1.6 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 model
import (
"fmt"
"time"
"github.com/spf13/viper"
// MySQL driver.
"github.com/jinzhu/gorm"
// GORM MySQL
_ "github.com/jinzhu/gorm/dialects/mysql"
"github.com/1024casts/snake/pkg/log"
)
// DB 数据库全局变量
var DB *gorm.DB
// Init 初始化数据库
func Init() *gorm.DB {
return openDB(viper.GetString("mysql.username"),
viper.GetString("mysql.password"),
viper.GetString("mysql.addr"),
viper.GetString("mysql.name"))
}
// openDB 链接数据库,生成数据库实例
func openDB(username, password, addr, name string) *gorm.DB {
config := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=%t&loc=%s",
username,
password,
addr,
name,
true,
//"Asia/Shanghai"),
"Local")
db, err := gorm.Open("mysql", config)
if err != nil {
log.Errorf("Database connection failed. Database name: %s, err: %+v", name, err)
}
db.Set("gorm:table_options", "CHARSET=utf8mb4")
// set for db connection
db.LogMode(viper.GetBool("mysql.show_log"))
// 用于设置最大打开的连接数默认值为0表示不限制.设置最大的连接数可以避免并发太高导致连接mysql出现too many connections的错误。
db.DB().SetMaxOpenConns(viper.GetInt("mysql.max_open_conn"))
// 用于设置闲置的连接数.设置闲置的连接数则当开启的一个连接使用完成后可以放在池里等候下一次使用。
db.DB().SetMaxIdleConns(viper.GetInt("mysql.max_idle_conn"))
db.DB().SetConnMaxLifetime(time.Minute * viper.GetDuration("mysql.conn_max_life_time"))
DB = db
return db
}
// GetDB 返回默认的数据库
func GetDB() *gorm.DB {
return DB
}