diff --git a/internal/conf/conf.go b/internal/conf/conf.go index 433bf5c3..5314add7 100644 --- a/internal/conf/conf.go +++ b/internal/conf/conf.go @@ -7,7 +7,7 @@ import ( ) var ( - LoggerSetting *LoggerSettingS + loggerSetting *LoggerSettingS loggerFileSetting *LoggerFileSettingS loggerZincSetting *LoggerZincSettingS loggerMeiliSetting *LoggerMeiliSettingS @@ -57,7 +57,7 @@ func setupSetting(suite []string, noDefault bool) error { "BigCacheIndex": &BigCacheIndexSetting, "Alipay": &AlipaySetting, "SmsJuhe": &SmsJuheSetting, - "Logger": &LoggerSetting, + "Logger": &loggerSetting, "LoggerFile": &loggerFileSetting, "LoggerZinc": &loggerZincSetting, "LoggerMeili": &loggerMeiliSetting, @@ -97,11 +97,7 @@ func Initialize(suite []string, noDefault bool) { } setupLogger() - - err = setupDBEngine() - if err != nil { - log.Fatalf("init.setupDBEngine err: %v", err) - } + setupDBEngine() } // Cfg get value by key if exist diff --git a/internal/conf/db.go b/internal/conf/db.go index 550bbb42..ff5f3324 100644 --- a/internal/conf/db.go +++ b/internal/conf/db.go @@ -1,6 +1,7 @@ package conf import ( + "sync" "time" "github.com/go-redis/redis/v8" @@ -15,10 +16,21 @@ import ( ) var ( - DBEngine *gorm.DB - Redis *redis.Client + db *gorm.DB + Redis *redis.Client + once sync.Once ) +func MustGormDB() *gorm.DB { + once.Do(func() { + var err error + if db, err = newDBEngine(); err != nil { + logrus.Fatalf("new gorm db failed: %s", err) + } + }) + return db +} + func newDBEngine() (*gorm.DB, error) { newLogger := logger.New( logrus.StandardLogger(), // io writer(日志输出的目标,前缀和日志包含的内容) @@ -69,19 +81,10 @@ func newDBEngine() (*gorm.DB, error) { return db, err } -// setupDBEngine 暂时只支持MySQL -func setupDBEngine() error { - var err error - DBEngine, err = newDBEngine() - if err != nil { - return err - } - +func setupDBEngine() { Redis = redis.NewClient(&redis.Options{ Addr: redisSetting.Host, Password: redisSetting.Password, DB: redisSetting.DB, }) - - return nil } diff --git a/internal/conf/logger.go b/internal/conf/logger.go index 6f978f07..ef466079 100644 --- a/internal/conf/logger.go +++ b/internal/conf/logger.go @@ -18,7 +18,7 @@ func newFileLogger() io.Writer { func setupLogger() { logrus.SetFormatter(&logrus.JSONFormatter{}) - logrus.SetLevel(LoggerSetting.logLevel()) + logrus.SetLevel(loggerSetting.logLevel()) if CfgIf("LoggerFile") { out := newFileLogger() diff --git a/internal/dao/jinzhu/jinzhu.go b/internal/dao/jinzhu/jinzhu.go index 7eac0aea..736b4f43 100644 --- a/internal/dao/jinzhu/jinzhu.go +++ b/internal/dao/jinzhu/jinzhu.go @@ -39,7 +39,7 @@ func NewDataService() (core.DataService, core.VersionInfo) { c core.CacheIndexService v core.VersionInfo ) - db := conf.DBEngine + db := conf.MustGormDB() i := newIndexPostsService(db) if conf.CfgIf("SimpleCacheIndex") { @@ -71,7 +71,7 @@ func NewDataService() (core.DataService, core.VersionInfo) { func NewAuthorizationManageService() core.AuthorizationManageService { return &authorizationManageServant{ - db: conf.DBEngine, + db: conf.MustGormDB(), } } diff --git a/internal/middleware/jwt.go b/internal/middleware/jwt.go index fc6db41e..fb683cc9 100644 --- a/internal/middleware/jwt.go +++ b/internal/middleware/jwt.go @@ -12,6 +12,8 @@ import ( ) func JWT() gin.HandlerFunc { + // TODO: optimize get user from a simple service that provide fetch a user info interface. + db := conf.MustGormDB() return func(c *gin.Context) { var ( token string @@ -54,7 +56,7 @@ func JWT() gin.HandlerFunc { ID: claims.UID, }, } - user, _ = user.Get(conf.DBEngine) + user, _ = user.Get(db) c.Set("USER", user) // 强制下线机制 @@ -76,6 +78,8 @@ func JWT() gin.HandlerFunc { } func JwtLoose() gin.HandlerFunc { + // TODO: optimize get user from a simple service that provide fetch a user info interface. + db := conf.MustGormDB() return func(c *gin.Context) { token, exist := c.GetQuery("token") if !exist { @@ -98,7 +102,7 @@ func JwtLoose() gin.HandlerFunc { ID: claims.UID, }, } - user, err := user.Get(conf.DBEngine) + user, err := user.Get(db) if err == nil && (conf.JWTSetting.Issuer+":"+user.Salt) == claims.Issuer { c.Set("USER", user) } diff --git a/main.go b/main.go index a0e0d4bc..54f41814 100644 --- a/main.go +++ b/main.go @@ -16,8 +16,6 @@ import ( ) var ( - version, commitID, buildDate string - noDefaultFeatures bool features suites )