12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package mysql
- import (
- "database/sql"
- "fmt"
- "gorm.io/driver/mysql"
- "gorm.io/gorm"
- "gorm.io/gorm/logger"
- "gorm.io/plugin/dbresolver"
- setting "icloudapp.cn/tools/config"
- "icloudapp.cn/tools/service/entity"
- "icloudapp.cn/tools/service/model"
- )
- var DBConn *gorm.DB
- func Init(cfg *setting.MySQLConfig) {
- dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
- cfg.User, cfg.Password, cfg.Host, cfg.DB)
- sqlDB, err := sql.Open("mysql", dsn)
- if err != nil {
- panic(fmt.Sprintf("sql.Open err, \v", err))
- }
- sqlDB.SetMaxOpenConns(cfg.MaxOpenConns) //最大连接数
- sqlDB.SetMaxOpenConns(cfg.MaxIdleConns)
- loggerLevel := logger.Silent
- if setting.Conf.Mode == "dev" {
- loggerLevel = logger.Info
- }
- gormDB, err := gorm.Open(mysql.New(mysql.Config{
- Conn: sqlDB,
- }), &gorm.Config{
- DisableForeignKeyConstraintWhenMigrating: true, //禁用外键生成
- Logger: logger.Default.LogMode(loggerLevel),
- })
- if err != nil {
- panic(fmt.Sprintf("链接数据库失败\v", err))
- }
- // db resolver
- var material *entity.Material
- var group *entity.Group
- var user *entity.User
- errDbresolver := gormDB.Use(dbresolver.Register(dbresolver.Config{
- Sources: []gorm.Dialector{open(cfg)},
- Replicas: []gorm.Dialector{open(cfg), open(cfg)},
- Policy: dbresolver.RandomPolicy{},
- TraceResolverMode: true,
- }).Register(dbresolver.Config{
- Replicas: []gorm.Dialector{open(setting.Conf.ReplicasForUser)},
- TraceResolverMode: true,
- }, user).Register(dbresolver.Config{
- Sources: []gorm.Dialector{open(setting.Conf.ReplicasForOrder), open(setting.Conf.ReplicasForOrder)},
- Replicas: []gorm.Dialector{open(setting.Conf.ReplicasForOrder)},
- TraceResolverMode: true,
- }, group, material))
- if err != nil {
- panic("dbResolver err :" + errDbresolver.Error())
- }
- DBConn = gormDB
- model.SetDefault(DBConn)
- }
- func open(cfg *setting.MySQLConfig) gorm.Dialector {
- dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
- cfg.User, cfg.Password, cfg.Host, cfg.DB)
- return mysql.Open(dsn)
- }
|