mysql.go 2.1 KB
Newer Older
1
package initialize
Mr.奇淼('s avatar
Mr.奇淼( 已提交
2 3 4

import (
	"gin-vue-admin/global"
5
	"go.uber.org/zap"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
6 7 8
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
9
	"os"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
10 11
)

12
// 初始化数据库并产生数据库全局变量
13
func Mysql() {
14
	admin := global.GVA_CONFIG.Mysql
Mr.奇淼('s avatar
Mr.奇淼( 已提交
15 16
	mysqlConfig := mysql.Config{
		DSN:                       admin.Username + ":" + admin.Password + "@(" + admin.Path + ")/" + admin.Dbname + "?" + admin.Config, // DSN data source name
17
		DefaultStringSize:         191,                                                                                                  // string 类型字段的默认长度
Mr.奇淼('s avatar
Mr.奇淼( 已提交
18 19 20 21 22 23 24 25
		DisableDatetimePrecision:  true,                                                                                                 // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
		DontSupportRenameIndex:    true,                                                                                                 // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
		DontSupportRenameColumn:   true,                                                                                                 // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列
		SkipInitializeWithVersion: false,                                                                                                // 根据版本自动配置
	}
	var gormConfig *gorm.Config
	if admin.LogMode { //根据配置决定是否开启日志
		gormConfig = &gorm.Config{
26
			Logger:                                   logger.Default.LogMode(logger.Info),
27
			DisableForeignKeyConstraintWhenMigrating: true,
Mr.奇淼('s avatar
Mr.奇淼( 已提交
28 29
		}
	} else {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
30
		gormConfig = &gorm.Config{
31 32
			Logger:                                   logger.Default.LogMode(logger.Silent),
			DisableForeignKeyConstraintWhenMigrating: true,
Mr.奇淼('s avatar
Mr.奇淼( 已提交
33
		}
Mr.奇淼('s avatar
Mr.奇淼( 已提交
34 35 36
	}

	if db, err := gorm.Open(mysql.New(mysqlConfig), gormConfig); err != nil {
37
		global.GVA_LOG.Error("MySQL启动异常", zap.Any("err", err))
38
		os.Exit(0)
Mr.奇淼('s avatar
Mr.奇淼( 已提交
39 40
	} else {
		global.GVA_DB = db
Mr.奇淼('s avatar
Mr.奇淼( 已提交
41 42 43
		sqlDB, _ := db.DB()
		sqlDB.SetMaxIdleConns(admin.MaxIdleConns)
		sqlDB.SetMaxOpenConns(admin.MaxOpenConns)
Mr.奇淼('s avatar
Mr.奇淼( 已提交
44 45
	}
}