mh_server/model/base_init_db.go
2021-11-01 11:32:23 +08:00

137 lines
2.9 KiB
Go

package model
import (
"fmt"
"mh-server/config"
"time"
"github.com/codinl/go-logger"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
var DB *gorm.DB
func InitDB() {
var err error
dialect := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
config.AppConfig.DBUser, config.AppConfig.DBPassword, config.AppConfig.DBHost, config.AppConfig.DBPort,
config.AppConfig.DBName)
DB, err = gorm.Open(config.AppConfig.DBDriver, dialect)
if err != nil {
fmt.Println("Connect Database Error, error = ", err)
logger.Info("Connect Database Error, error = ", err)
panic(err)
}
DB.DB().SetMaxOpenConns(1000)
DB.DB().SetMaxIdleConns(500)
DB.DB().SetConnMaxLifetime(time.Second * 10)
DB.LogMode(true)
DB.SetLogger(DBLoggerWriter{})
DB.SingularTable(true)
if err := DB.DB().Ping(); err != nil {
fmt.Println("Ping Database Fail, error = ", err)
logger.Info("Ping Database Fail, error = ", err)
panic(err)
}
fmt.Println("DB init success")
logger.Info("DB init success")
//if config.AppConfig.Env == "dev" {
// migrateTable(DB)
//}
}
func CloseDB() {
if DB != nil {
if err := DB.Close(); err != nil {
fmt.Println("DB Close err", err)
logger.Error("DB Close err", err)
}
}
}
type DBLoggerWriter struct {
gorm.LogWriter
}
func (DBLoggerWriter) Print(values ...interface{}) {
//logger.Info(values...)
}
func TransactionBegin() *gorm.DB {
return DB.Begin()
}
// Transaction 事务自动处理,如果有错误将回滚,否则将提交事务
func Transaction(tx *gorm.DB, err error) error {
if err == nil {
ret := tx.Commit()
if ret.Error != nil {
return ret.Error
}
return err
}
ret := tx.Rollback()
if ret.Error != nil {
return ret.Error
}
return nil
}
func initCreateTable() {
if err := DB.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8").AutoMigrate().Error; err != nil {
logger.Info("AutoMigrate createTable Error, error = ", err)
fmt.Println("AutoMigrate createTable err:", err)
}
}
// 测试服务器
func InitDBTest() {
var err error
dialect := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
"mh_dev", "m5h4parZsXjbeiFh", "39.108.188.218", "3306", "mh_dev")
db, err := gorm.Open("mysql", dialect)
if err != nil {
logger.Infof("Open DB error [%s] with dialect[%s]", err.Error(), dialect)
panic(err)
}
if db.DB().Ping() != nil {
fmt.Printf("Ping DB fail: %#v", db.Error)
panic(err)
}
db.SingularTable(true)
db.AutoMigrate(
&User{},
//&LotteryInviteTargetUser{},
&GameCard{},
&Collection{},
&Config{},
&HistoryBrowsing{},
&ShoppingCart{},
&UserAddress{},
&SearchHistory{},
&Order{},
&HotSearch{},
&HomeCarousel{},
&GameCardType{},
&Store{},
&GameType{},
&UserOpenMemberRecord{},
&CommonProblem{},
&ExpressCompany{},
&GameCardGoodsStock{},
&GameCardGoods{},
)
fmt.Println("DB init success")
DB = db
logger.Info("ok")
}