package initialize import ( "fmt" log "github.com/sirupsen/logrus" logrus "github.com/sirupsen/logrus" "gorm.io/driver/mysql" "gorm.io/gorm" "standard/cobra/internal/pkg/configs" "standard/cobra/internal/pkg/db" logs "standard/cobra/internal/pkg/logger" "time" ) /* /internal/pkg/initialize 该package用于各种数据库、中间件连接的初始化 */ //初始化mysql func InitDBRepo(cfg *configs.Config, logger *log.Logger) (*db.MysqlRepo, error) { //1.创建Gorm的logger gormLogger := logs.NewGormLogger(logger) //2.根据配置文件进行连接格式化 dsn := fmt.Sprintf( "%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", cfg.Mysql.Username, cfg.Mysql.Password, cfg.Mysql.Host, cfg.Mysql.Port, cfg.Mysql.Database) //3.获取数据库连接 mysqlDB, err := gorm.Open(mysql.Open(dsn), &gorm.Config{Logger: gormLogger}) if err != nil { return nil, err } sqlDB, err := mysqlDB.DB() if err != nil { return nil, err } // SetMaxIdleConns 设置空闲连接池中连接的最大数量 sqlDB.SetMaxIdleConns(10) // SetMaxOpenConns 设置打开数据库连接的最大数量 sqlDB.SetMaxOpenConns(100) // SetConnMaxLifetime 设置了连接可复用的最大时间 sqlDB.SetConnMaxLifetime(time.Hour) return db.NewMysqlRepo(mysqlDB), nil } func newMysqlDB(dsn string) (*gorm.DB, error) { return gorm.Open(mysql.Open(dsn), &gorm.Config{}) } //日志实例初始化 func Logger(logger *log.Logger,config *configs.Config ) *log.Logger { //if config.App.Env == "prod" { // log.SetFormatter(&log.JSONFormatter{}) //} switch config.App.LogLevel { case "debug": logrus.SetLevel(log.DebugLevel) case "error": logrus.SetLevel(log.ErrorLevel) case "warn": logrus.SetLevel(log.WarnLevel) default: logrus.SetLevel(log.InfoLevel) } return logrus.StandardLogger() } //self //func InitMysql(config *configs.Config)(*gorm.DB, error){ // dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local", // config.Mysql.Username, // config.Mysql.Password, // config.Mysql.Host, // config.Mysql.Port, // config.Mysql.Database, // config.Mysql.Charset) // // db, err := newMysqlDB(dsn) // if err != nil { // return nil,err // } // return db,nil //} //func InitRedisClient(config *configs.Config) *redis.Client { // return redis.NewClient(&redis.Options{ // Addr: config.Redis.Host, // use default Addr // Password: config.Redis.Password, // no password set // DB: int(config.Redis.Db), // use default DB // }) //}