mysql.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package init_serve
  2. import (
  3. "fmt"
  4. "gorm.io/driver/mysql"
  5. "gorm.io/gorm"
  6. "gorm.io/gorm/logger"
  7. "hongze/hongze_yb_en_api/global"
  8. "io"
  9. "log"
  10. "os"
  11. "time"
  12. )
  13. // Mysql 数据库初始化
  14. func Mysql() {
  15. mysqlConf := global.CONFIG.Mysql
  16. if len(mysqlConf.List) <= 0 {
  17. global.LOG.Error("mysql链接未配置")
  18. panic(fmt.Errorf("mysql链接未配置"))
  19. }
  20. //开启日志
  21. logWriter := io.MultiWriter(global.MYSQL_LOG) //binlog日志,记录到文件中去
  22. if global.CONFIG.Mysql.Stdout {
  23. logWriter = io.MultiWriter(global.MYSQL_LOG, os.Stdout)
  24. }
  25. newLogger := logger.New(log.New(logWriter, "\r\n", log.LstdFlags), logger.Config{
  26. SlowThreshold: 200 * time.Millisecond, //慢sql :200ms
  27. LogLevel: logger.Info, //记录的日志类型,info代表所有信息都记录
  28. IgnoreRecordNotFoundError: true, //是否忽略找不到数据错误信息(只是日志记录记录成err还是普通的输出的区别,并不影响业务代码中的:找不到数据行error)
  29. Colorful: true, //是否颜色输出
  30. })
  31. mysqlMap := make(map[string]*gorm.DB)
  32. for _, conf := range mysqlConf.List {
  33. dsn := conf.Dsn
  34. db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
  35. Logger: newLogger,
  36. })
  37. if err != nil {
  38. global.LOG.Errorf("mysql 启动异常,数据库:", conf.AliasName, ";Err:", err)
  39. panic(fmt.Errorf("mysql 启动异常,数据库:", conf.AliasName, "Err:%s", err))
  40. }
  41. //创建连接池
  42. sqlDB, err := db.DB()
  43. if err != nil {
  44. global.LOG.Errorf("mysql 创建连接池失败,数据库:", conf.AliasName, ";Err:", err)
  45. panic(fmt.Errorf("mysql 创建连接池失败,数据库:", conf.AliasName, "Err:%s", err))
  46. }
  47. mysqlMap[conf.AliasName] = db
  48. //默认数据库连接
  49. if mysqlConf.DefaultDsnAliasName == conf.AliasName {
  50. global.DEFAULT_MYSQL = db
  51. }
  52. // SetMaxIdleConns 设置空闲连接池中连接的最大数量
  53. sqlDB.SetMaxIdleConns(conf.MaxIdleConns)
  54. // SetMaxOpenConns 设置打开数据库连接的最大数量。
  55. sqlDB.SetMaxOpenConns(conf.MaxOpenConns)
  56. // SetConnMaxLifetime 设置了连接可复用的最大时间。
  57. //sqlDB.SetConnMaxLifetime(time.Hour)
  58. }
  59. //全局赋值数据库链接
  60. global.MYSQL = mysqlMap
  61. }