123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- package global
- import (
- _ "dm"
- dm "dmgorm2"
- "eta_gn/eta_api/utils"
- "fmt"
- "gorm.io/gorm"
- "gorm.io/gorm/logger"
- "gorm.io/gorm/schema"
- "io"
- "log"
- "os"
- "time"
- _ "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, //是否颜色输出
- })
- // 默认库
- connectDm(utils.MYSQL_URL, "default", newLogger, dmSqlMap, true)
- // 报告库
- connectDm(utils.MYSQL_URL_RDDP, "rddp", newLogger, dmSqlMap, false)
- // 手工数据库
- connectDm(utils.MYSQL_URL_EDB, "edb", newLogger, dmSqlMap, false)
- // 指标库
- connectDm(utils.MYSQL_URL_DATA, "data", newLogger, dmSqlMap, false)
- // 钢联库
- connectDm(utils.MYSQL_URL_GL, "gl", newLogger, dmSqlMap, false)
- // 用户主库
- if utils.MYSQL_WEEKLY_URL != `` && (utils.BusinessCode == utils.BusinessCodeRelease || utils.BusinessCode == utils.BusinessCodeSandbox || utils.BusinessCode == utils.BusinessCodeDebug) {
- // 用户主库
- connectDm(utils.MYSQL_WEEKLY_URL, "weekly", newLogger, dmSqlMap, false)
- }
- if utils.MYSQL_AI_URL != "" {
- // AI库
- connectDm(utils.MYSQL_AI_URL, "ai", 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)
- }
|