| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | package mqttstoreimport (	"kpt-pasture/config"	"time"	"gitee.com/xuyiping_admin/pkg/logger/logrus"	"gitee.com/xuyiping_admin/pkg/xerr"	"gorm.io/driver/mysql"	"gorm.io/gorm"	"gorm.io/gorm/logger"	"gitee.com/xuyiping_admin/pkg/di")var Module = di.Options(	di.Provide(MustNewStore),)type DB struct {	*gorm.DB}func NewStore(engine *gorm.DB) *DB {	return &DB{engine}}type goRmLog struct {}func (g goRmLog) Printf(s string, i ...interface{}) {	logrus.Infof(s, i...)}var newLogger = logger.New(	goRmLog{},	logger.Config{		SlowThreshold: 5 * time.Second,		LogLevel:      logger.Info,	},)func MustNewStore(cfg *config.AppConfig) *DB {	db, err := gorm.Open(mysql.New(mysql.Config{		DriverName: cfg.StoreSetting.DriverName,		DSN:        cfg.StoreSetting.KptMqtt}),		&gorm.Config{Logger: newLogger},	)	if err != nil {		panic(xerr.WithStack(err))	}	if cfg.StoreSetting.ShowSQL {		db.Logger.LogMode(logger.Info)	}	sqlDb, _ := db.DB()	sqlDb.SetMaxOpenConns(100)                // 设置最大空闲连接数为10个	sqlDb.SetConnMaxIdleTime(10)              // 设置可打开的最大连接数为 100 个	sqlDb.SetConnMaxLifetime(5 * time.Minute) // 5分钟 设置一个连接空闲后在多长时间内可复用,上面配置文件里设置的是300000000000, 因为Go的time.Duration底层类型是int64, 一秒是1000000000,这个大家可设置一个适当的时间,一般5~15分钟,不要太长	if err = sqlDb.Ping(); err != nil {		panic(xerr.WithStack(err))	}	return NewStore(db)}func MustMigrateStore(cfg *config.AppConfig) *gorm.DB {	db, err := gorm.Open(mysql.New(mysql.Config{		DriverName: cfg.StoreSetting.DriverName,		DSN:        cfg.StoreSetting.KptMigr}),		&gorm.Config{Logger: newLogger},	)	if err != nil {		panic(xerr.WithStack(err))	}	if cfg.StoreSetting.ShowSQL {		db.Logger.LogMode(logger.Info)	}	sqlDb, _ := db.DB()	sqlDb.SetMaxOpenConns(100)             // 设置最大空闲连接数为10个	sqlDb.SetConnMaxIdleTime(10)           // 设置可打开的最大连接数为 100 个	sqlDb.SetConnMaxLifetime(300000000000) // 5分钟 设置一个连接空闲后在多长时间内可复用,上面配置文件里设置的是300000000000, 因为Go的time.Duration底层类型是int64, 一秒是1000000000,这个大家可设置一个适当的时间,一般5~15分钟,不要太长	if err = sqlDb.Ping(); err != nil {		panic(xerr.WithStack(err))	}	return db}
 |