rw_store.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package kptstore
  2. import (
  3. "kpt-pasture/config"
  4. "time"
  5. "gitee.com/xuyiping_admin/pkg/logger/logrus"
  6. "gitee.com/xuyiping_admin/pkg/xerr"
  7. "gorm.io/driver/mysql"
  8. "gorm.io/gorm"
  9. "gorm.io/gorm/logger"
  10. "gitee.com/xuyiping_admin/pkg/di"
  11. )
  12. var Module = di.Options(
  13. di.Provide(MustNewStore),
  14. )
  15. type DB struct {
  16. *gorm.DB
  17. }
  18. func NewStore(engine *gorm.DB) *DB {
  19. return &DB{engine}
  20. }
  21. type goRmLog struct {
  22. }
  23. func (g goRmLog) Printf(s string, i ...interface{}) {
  24. logrus.Infof(s, i...)
  25. }
  26. var newLogger = logger.New(
  27. goRmLog{},
  28. logger.Config{
  29. SlowThreshold: 5 * time.Second,
  30. LogLevel: logger.Info,
  31. },
  32. )
  33. func MustNewStore(cfg *config.AppConfig) *DB {
  34. db, err := gorm.Open(mysql.New(mysql.Config{
  35. DriverName: cfg.StoreSetting.DriverName,
  36. DSN: cfg.StoreSetting.KptRW}),
  37. &gorm.Config{Logger: newLogger},
  38. )
  39. if err != nil {
  40. panic(xerr.WithStack(err))
  41. }
  42. if cfg.StoreSetting.ShowSQL {
  43. db.Logger.LogMode(logger.Info)
  44. }
  45. sqlDb, _ := db.DB()
  46. sqlDb.SetMaxOpenConns(100) // 设置最大空闲连接数为10个
  47. sqlDb.SetConnMaxIdleTime(10) // 设置可打开的最大连接数为 100 个
  48. sqlDb.SetConnMaxLifetime(5 * time.Minute) // 5分钟 设置一个连接空闲后在多长时间内可复用,上面配置文件里设置的是300000000000, 因为Go的time.Duration底层类型是int64, 一秒是1000000000,这个大家可设置一个适当的时间,一般5~15分钟,不要太长
  49. if err = sqlDb.Ping(); err != nil {
  50. panic(xerr.WithStack(err))
  51. }
  52. return NewStore(db)
  53. }
  54. func MustMigrateStore(cfg *config.AppConfig) *gorm.DB {
  55. db, err := gorm.Open(mysql.New(mysql.Config{
  56. DriverName: cfg.StoreSetting.DriverName,
  57. DSN: cfg.StoreSetting.KptMigr}),
  58. &gorm.Config{Logger: newLogger},
  59. )
  60. if err != nil {
  61. panic(xerr.WithStack(err))
  62. }
  63. if cfg.StoreSetting.ShowSQL {
  64. db.Logger.LogMode(logger.Info)
  65. }
  66. sqlDb, _ := db.DB()
  67. sqlDb.SetMaxOpenConns(100) // 设置最大空闲连接数为10个
  68. sqlDb.SetConnMaxIdleTime(10) // 设置可打开的最大连接数为 100 个
  69. sqlDb.SetConnMaxLifetime(300000000000) // 5分钟 设置一个连接空闲后在多长时间内可复用,上面配置文件里设置的是300000000000, 因为Go的time.Duration底层类型是int64, 一秒是1000000000,这个大家可设置一个适当的时间,一般5~15分钟,不要太长
  70. if err = sqlDb.Ping(); err != nil {
  71. panic(xerr.WithStack(err))
  72. }
  73. return db
  74. }