repository.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package repository
  2. import (
  3. "city_chips/pkg/log"
  4. "runtime"
  5. "time"
  6. "github.com/spf13/viper"
  7. "gorm.io/driver/mysql"
  8. "gorm.io/gorm"
  9. "gorm.io/gorm/logger"
  10. )
  11. type Repository struct {
  12. db *gorm.DB
  13. // rdb *redis.Client
  14. logger *log.Logger
  15. }
  16. func NewRepository(logger *log.Logger, db *gorm.DB) *Repository {
  17. return &Repository{
  18. db: db,
  19. // rdb: rdb,
  20. logger: logger,
  21. }
  22. }
  23. func NewDb(conf *viper.Viper, l *log.Logger) *gorm.DB {
  24. // TODO: init db
  25. sysType := runtime.GOOS
  26. config := gorm.Config{}
  27. if sysType == "windows" {
  28. config.Logger = logger.Default.LogMode(logger.Info)
  29. config.DisableForeignKeyConstraintWhenMigrating = true
  30. } else if sysType == "linux" {
  31. config.DisableForeignKeyConstraintWhenMigrating = true
  32. }
  33. db, err := gorm.Open(mysql.Open(conf.GetString("data.mysql.user")), &config)
  34. sqlDB, err := db.DB()
  35. // 设置最大连接数
  36. sqlDB.SetMaxOpenConns(20) // 设置最大打开连接数
  37. // 设置空闲连接数
  38. sqlDB.SetMaxIdleConns(200) // 设置最大空闲连接数
  39. // 设置连接的最大存活时间
  40. sqlDB.SetConnMaxLifetime(time.Hour) // 设置连接的最大存活时间为1小时
  41. if err != nil {
  42. panic(err)
  43. }
  44. return db
  45. }
  46. // func NewRedis(conf *viper.Viper) *redis.Client {
  47. // rdb := redis.NewClient(&redis.Options{
  48. // Addr: conf.GetString("data.redis.addr"),
  49. // Password: conf.GetString("data.redis.password"),
  50. // DB: conf.GetInt("data.redis.db"),
  51. // })
  52. // ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  53. // defer cancel()
  54. // _, err := rdb.Ping(ctx).Result()
  55. // if err != nil {
  56. // panic(fmt.Sprintf("redis error: %s", err.Error()))
  57. // }
  58. // return rdb
  59. // }