dm.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package global
  2. import (
  3. _ "dm"
  4. dm "dmgorm2"
  5. utils "eta_gn/eta_report/utils"
  6. "fmt"
  7. "io"
  8. "log"
  9. "os"
  10. "time"
  11. "gorm.io/gorm"
  12. "gorm.io/gorm/logger"
  13. "gorm.io/gorm/schema"
  14. _ "github.com/go-sql-driver/mysql"
  15. )
  16. func InitDm() {
  17. dmSqlMap := make(map[string]*gorm.DB)
  18. logWriter := io.MultiWriter(utils.Binlog) //binlog日志,记录到文件中去
  19. if utils.RunMode == `dev` { // 测试环境,默认输出在控制台,不需要的话,可以注释if里面下面的这行
  20. logWriter = io.MultiWriter(utils.Binlog, os.Stdout)
  21. }
  22. newLogger := logger.New(log.New(logWriter, "\r\n", log.LstdFlags), logger.Config{
  23. SlowThreshold: 200 * time.Millisecond, //慢sql :200ms
  24. LogLevel: logger.Info, //记录的日志类型,info代表所有信息都记录
  25. IgnoreRecordNotFoundError: true, //是否忽略找不到数据错误信息(只是日志记录记录成err还是普通的输出的区别,并不影响业务代码中的:找不到数据行error)
  26. Colorful: true, //是否颜色输出
  27. })
  28. connectDm(utils.MYSQL_URL, "default", newLogger, dmSqlMap, true)
  29. connectDm(utils.MYSQL_URL_ETA, "eta", newLogger, dmSqlMap, false)
  30. DmSQL = dmSqlMap
  31. }
  32. func connectDm(dsn, aliasName string, newLogger logger.Interface, dmSqlMap map[string]*gorm.DB, isDefault bool) {
  33. if dsn == `` {
  34. return
  35. }
  36. db, err := gorm.Open(dm.Open(dsn), &gorm.Config{
  37. Logger: newLogger,
  38. NamingStrategy: schema.NamingStrategy{
  39. SingularTable: true, // 表示使用单数表名,启用该选项后,GORM 将不会对表名进行复数化处理
  40. },
  41. })
  42. if err != nil {
  43. panic(fmt.Errorf("mysql 启动异常,数据库:%s;Err:%s", aliasName, err))
  44. }
  45. sqlDB, err := db.DB()
  46. if err != nil {
  47. panic(fmt.Errorf("mysql 创建连接池失败,数据库:%s;Err:%s", aliasName, err))
  48. }
  49. dmSqlMap[aliasName] = db
  50. if isDefault {
  51. DEFAULT_DmSQL = db
  52. }
  53. sqlDB.SetMaxIdleConns(50)
  54. sqlDB.SetMaxOpenConns(100)
  55. sqlDB.SetConnMaxLifetime(10 * time.Minute)
  56. }