package global import ( _ "dm" dm "dmgorm2" utils "eta_gn/eta_report/utils" "fmt" "io" "log" "os" "time" "gorm.io/gorm" "gorm.io/gorm/logger" "gorm.io/gorm/schema" _ "github.com/go-sql-driver/mysql" ) // InitDm // @Description: 达梦数据库初始化 func InitDm() { dmSqlMap := make(map[string]*gorm.DB) //开启日志 logWriter := io.MultiWriter(utils.Binlog) //binlog日志,记录到文件中去 if utils.RunMode == `dev` { // 测试环境,默认输出在控制台,不需要的话,可以注释if里面下面的这行 logWriter = io.MultiWriter(utils.Binlog, os.Stdout) } newLogger := logger.New(log.New(logWriter, "\r\n", log.LstdFlags), logger.Config{ SlowThreshold: 200 * time.Millisecond, //慢sql :200ms LogLevel: logger.Info, //记录的日志类型,info代表所有信息都记录 IgnoreRecordNotFoundError: true, //是否忽略找不到数据错误信息(只是日志记录记录成err还是普通的输出的区别,并不影响业务代码中的:找不到数据行error) Colorful: true, //是否颜色输出 }) // eta_report connectDm(utils.MYSQL_URL, "default", newLogger, dmSqlMap, true) // eta_master connectDm(utils.MYSQL_URL_ETA, "eta", newLogger, dmSqlMap, false) // crm_master //connectDm(utils.MYSQL_WEEKLY_URL, "weekly", newLogger, dmSqlMap, false) //全局赋值数据库链接 DmSQL = dmSqlMap } // connectDm // @Description: 达梦数据库连接 // @param dsn // @param aliasName // @param newLogger // @param dmSqlMap // @param isDefault func connectDm(dsn, aliasName string, newLogger logger.Interface, dmSqlMap map[string]*gorm.DB, isDefault bool) { //fmt.Println("dsn:", dsn, " == ;aliasName:", aliasName) if dsn == `` { return } //dsn := "dm://SYSDBA:SYSDBA001@8.136.199.33:30236?schema=\"eta_master\"" //dsn := "dm://ETA:Han6258199118%60@localhost:5236?schema=ECOLOGY_TARGET" db, err := gorm.Open(dm.Open(dsn), &gorm.Config{ Logger: newLogger, NamingStrategy: schema.NamingStrategy{ SingularTable: true, // 表示使用单数表名,启用该选项后,GORM 将不会对表名进行复数化处理 }, }) if err != nil { //global.LOG.Errorf("mysql 启动异常,数据库:default;Err:", err) panic(fmt.Errorf("mysql 启动异常,数据库:%s;Err:%s", aliasName, err)) } //创建连接池 sqlDB, err := db.DB() if err != nil { //global.LOG.Errorf("mysql 创建连接池失败,数据库:default;Err:", err) panic(fmt.Errorf("mysql 创建连接池失败,数据库:%s;Err:%s", aliasName, err)) } dmSqlMap[aliasName] = db //默认数据库连接 if isDefault { DEFAULT_DmSQL = db } // SetMaxIdleConns 设置空闲连接池中连接的最大数量 sqlDB.SetMaxIdleConns(50) // SetMaxOpenConns 设置打开数据库连接的最大数量。 sqlDB.SetMaxOpenConns(100) // SetConnMaxLifetime 设置了连接可复用的最大时间。 sqlDB.SetConnMaxLifetime(10 * time.Minute) }