fonchain-artshow/pkg/db/init.go
2023-04-13 14:07:50 +08:00

96 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 db
import (
"fmt"
"fonchain-artshow/cmd/model"
"fonchain-artshow/pkg/m"
"os"
"strings"
"time"
"github.com/gin-gonic/gin"
"gopkg.in/ini.v1"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
)
var DbArtShow *gorm.DB
var (
Db string
DbHost string
DbPort string
DbUser string
DbPassWord string
DbName string
)
func Init(confPath string) {
//从本地读取环境变量
file, err := ini.Load(confPath)
if err != nil {
fmt.Println(m.ERROR_SERVER, err)
}
//加载数据库配置
LoadMysqlData(file)
//MySQL数据库
path := strings.Join([]string{DbUser, ":", DbPassWord, "@tcp(", DbHost, ":", DbPort, ")/", DbName, "?charset=utf8&parseTime=true&loc=Local"}, "")
//连接数据库
Database(path)
//migration() //迁移表 按需打开
}
func LoadMysqlData(file *ini.File) {
Db = file.Section("mysql").Key("Db").String()
DbHost = file.Section("mysql").Key("DbHost").String()
DbPort = file.Section("mysql").Key("DbPort").String()
DbUser = file.Section("mysql").Key("DbUser").String()
DbPassWord = file.Section("mysql").Key("DbPassWord").String()
DbName = file.Section("mysql").Key("DbName").String()
}
func Database(conn string) {
var ormLogger logger.Interface
if gin.Mode() == "debug" {
ormLogger = logger.Default.LogMode(logger.Info)
} else {
ormLogger = logger.Default
}
db, err := gorm.Open(mysql.New(mysql.Config{
DSN: conn, // DSN data source name
DefaultStringSize: 256, // string 类型字段的默认长度
DisableDatetimePrecision: true, // 禁用 datetime 精度MySQL 5.6 之前的数据库不支持
DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
DontSupportRenameColumn: true, // 用 `change` 重命名列MySQL 8 之前的数据库和 MariaDB 不支持重命名列
SkipInitializeWithVersion: false, // 根据版本自动配置
}), &gorm.Config{
Logger: ormLogger,
NamingStrategy: schema.NamingStrategy{
SingularTable: true,
},
})
sqlDB, _ := db.DB()
sqlDB.SetMaxIdleConns(20) //设置连接池,空闲
sqlDB.SetMaxOpenConns(100) //打开
sqlDB.SetConnMaxLifetime(time.Second * 30)
DbArtShow = db
if err != nil {
panic(err)
}
}
//执行数据迁移
func migration() {
//自动迁移模式
err := DbArtShow.AutoMigrate(&model.ArtShow{},
&model.ShowApply{}, &model.ArtworkPrice{}, &model.ShowRel{})
if err != nil {
fmt.Println("register table fail")
os.Exit(0)
}
fmt.Println("register table success")
}