Files
eagle/internal/model/init.go

109 lines
2.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"
)
// Database 定义现有的数据库
type Database struct {
Default *gorm.DB
Docker *gorm.DB
}
// DB 数据库全局变量
var DB *Database
// 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
setupDB(db)
return db
}
// setupDB 配置数据库
func setupDB(db *gorm.DB) {
db.LogMode(viper.GetBool("gorm.show_log"))
// 用于设置最大打开的连接数默认值为0表示不限制.设置最大的连接数可以避免并发太高导致连接mysql出现too many connections的错误。
db.DB().SetMaxOpenConns(viper.GetInt("grom.max_open_conn"))
// 用于设置闲置的连接数.设置闲置的连接数则当开启的一个连接使用完成后可以放在池里等候下一次使用。
db.DB().SetMaxIdleConns(viper.GetInt("grom.max_idle_conn"))
db.DB().SetConnMaxLifetime(time.Minute * viper.GetDuration("grom.conn_max_lift_time"))
}
// GetDB 返回默认的数据库
func GetDB() *gorm.DB {
return DB.Default
}
// InitDefaultDB used for cli
func InitDefaultDB() *gorm.DB {
return openDB(viper.GetString("db.username"),
viper.GetString("db.password"),
viper.GetString("db.addr"),
viper.GetString("db.name"))
}
// GetDefaultDB 获取默认数据库示例
func GetDefaultDB() *gorm.DB {
return InitDefaultDB()
}
// InitDockerDB 初始化一个docker数据库
func InitDockerDB() *gorm.DB {
return openDB(viper.GetString("docker_db.username"),
viper.GetString("docker_db.password"),
viper.GetString("docker_db.addr"),
viper.GetString("docker_db.name"))
}
// GetDockerDB 获取docker数据库
func GetDockerDB() *gorm.DB {
return InitDockerDB()
}
// Init 初始化数据库
func (db *Database) Init() {
DB = &Database{
Default: GetDefaultDB(),
Docker: GetDockerDB(),
}
}
// Close 关闭数据库链接
func (db *Database) Close() {
err := DB.Default.Close()
if err != nil {
log.Warnf("[model] close default db err: %+v", err)
}
err = DB.Docker.Close()
if err != nil {
log.Warnf("[model] close docker db err: %+v", err)
}
}