1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package kptstore
- import (
- "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.KptRW}),
- &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
- }
|