db.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package lxDb
  2. import (
  3. "context"
  4. "fmt"
  5. "git.listensoft.net/tool/lxutils/lxzap"
  6. "github.com/gin-gonic/gin"
  7. "go.uber.org/zap"
  8. "gorm.io/driver/mysql"
  9. "gorm.io/gorm"
  10. "gorm.io/gorm/logger"
  11. "gorm.io/gorm/schema"
  12. "os"
  13. )
  14. // DB2.0 数据库连接 gorm2.0
  15. var DBS map[string]*gorm.DB //gs 数据库
  16. type DbConfig struct {
  17. Name string
  18. Host string
  19. Port string
  20. User string
  21. Password string
  22. Database string
  23. Charset string
  24. }
  25. func GetDB(c *gin.Context, dbName ...string) *gorm.DB {
  26. v, _ := c.Get("X-Span-ID")
  27. spanId := fmt.Sprintf("%v", v)
  28. ctx := context.WithValue(context.Background(), "X-Span-ID", spanId)
  29. d := "one"
  30. if len(dbName) != 0 {
  31. d = dbName[0]
  32. }
  33. return DBS[d].WithContext(ctx)
  34. }
  35. func InitDBS(env string, conf []DbConfig) {
  36. DBS = map[string]*gorm.DB{}
  37. if len(conf) == 1 {
  38. conf[0].Name = "one"
  39. }
  40. for _, config := range conf {
  41. InitDB(env, config)
  42. }
  43. }
  44. func InitDB(env string, conf DbConfig) {
  45. if conf.Name == "" {
  46. DBS = nil
  47. fmt.Println("db name 错误")
  48. return
  49. }
  50. if conf.Host == "" {
  51. DBS = nil
  52. fmt.Println("未配置Db连接")
  53. return
  54. }
  55. if conf.Charset == "" {
  56. conf.Charset = "utf8mb4"
  57. }
  58. dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=True&loc=Local",
  59. conf.User, conf.Password, conf.Host, conf.Port, conf.Database, conf.Charset)
  60. if env == "dev" {
  61. db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
  62. Logger: logger.Default.LogMode(logger.Info),
  63. NamingStrategy: schema.NamingStrategy{
  64. SingularTable: true, // 使用单数表名,启用该选项,此时,`User` 的表名应该是 `user`
  65. },
  66. })
  67. if err != nil {
  68. fmt.Println(err.Error())
  69. os.Exit(-1)
  70. }
  71. DBS[conf.Name] = db
  72. } else {
  73. logger2 := lxzap.NewGormZap(zap.L())
  74. db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
  75. //Logger: logger.Default.LogMode(logger.Info),
  76. Logger: logger2,
  77. NamingStrategy: schema.NamingStrategy{
  78. SingularTable: true, // 使用单数表名,启用该选项,此时,`User` 的表名应该是 `user`
  79. },
  80. })
  81. if err != nil {
  82. fmt.Println(err.Error())
  83. os.Exit(-1)
  84. }
  85. DBS[conf.Name] = db
  86. }
  87. //db.AutoMigrate(TaskData{}, Task{}, Version{})
  88. }