db.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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 DB *gorm.DB //gs 数据库
  16. type DbConfig struct {
  17. Host string
  18. Port string
  19. User string
  20. Password string
  21. Database string
  22. Charset string
  23. }
  24. func GetDB(c *gin.Context) *gorm.DB {
  25. v, _ := c.Get("X-Span-ID")
  26. spanId := fmt.Sprintf("%v", v)
  27. ctx := context.WithValue(context.Background(), "X-Span-ID", spanId)
  28. return DB.WithContext(ctx)
  29. }
  30. func InitDB(env string, conf DbConfig) {
  31. //dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
  32. //newLogger := logger.New(
  33. // //zap.NewStdLog(),
  34. // log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
  35. // logger.Config{
  36. // SlowThreshold: 200 * time.Millisecond, // Slow SQL threshold
  37. // LogLevel: logger.Info, // Log level
  38. // IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger
  39. // Colorful: false, // Disable color
  40. // },
  41. //)
  42. if conf.Host == "" {
  43. DB = nil
  44. fmt.Println("未配置Db连接")
  45. return
  46. }
  47. if conf.Charset == "" {
  48. conf.Charset = "utf8mb4"
  49. }
  50. dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local",
  51. conf.User, conf.Password, conf.Host, conf.Port, conf.Database, conf.Charset)
  52. if env == "dev" {
  53. db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
  54. Logger: logger.Default.LogMode(logger.Info),
  55. NamingStrategy: schema.NamingStrategy{
  56. SingularTable: true, // 使用单数表名,启用该选项,此时,`User` 的表名应该是 `user`
  57. },
  58. })
  59. if err != nil {
  60. fmt.Println(err.Error())
  61. os.Exit(-1)
  62. }
  63. DB = db
  64. } else {
  65. logger2 := lxzap.NewGormZap(zap.L())
  66. db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
  67. //Logger: logger.Default.LogMode(logger.Info),
  68. Logger: logger2,
  69. NamingStrategy: schema.NamingStrategy{
  70. SingularTable: true, // 使用单数表名,启用该选项,此时,`User` 的表名应该是 `user`
  71. },
  72. })
  73. if err != nil {
  74. fmt.Println(err.Error())
  75. os.Exit(-1)
  76. }
  77. DB = db
  78. }
  79. //db.AutoMigrate(TaskData{}, Task{}, Version{})
  80. }