busniess-user-center/config/config.go

129 lines
3.0 KiB
Go

package config
import (
"busniess-user-center/pkg/log"
"busniess-user-center/pkg/redis"
"bytes"
"strconv"
"dario.cat/mergo"
"github.com/spf13/viper"
)
type RunEnv string
const (
RunEnvDev RunEnv = "dev"
RunEnvTest RunEnv = "test"
RunEnvBeta RunEnv = "beta"
RunEnvProd RunEnv = "prod"
)
type Mysql struct {
Database string `mapstructure:"database" json:"database"`
Host string `mapstructure:"host" json:"host"`
Port int `mapstructure:"port" json:"port"`
Password string `mapstructure:"password" json:"password"`
User string `mapstructure:"user" json:"user"`
MaxIdleConns int `mapstructure:"max_idle_conns" json:"max_idle_conns"`
MaxOpenConns int `mapstructure:"max_open_conns" json:"max_open_conns"`
ProjectMaxIdleConns int `mapstructure:"project_max_idle_conns" json:"project_max_idle_conns"`
ProjectMaxOpenConns int `mapstructure:"project_max_open_conns" json:"project_max_open_conns"`
}
type App struct {
RunEnv RunEnv `mapstructure:"run_env"`
Name string `mapstructure:"name"`
Code string `mapstructure:"code"`
Host string `mapstructure:"host"`
Port int `mapstructure:"port"`
Version string `mapstructure:"version"`
}
type Jwt struct {
Secret string `mapstructure:"secret"`
Expires int `mapstructure:"expires"`
}
type AppConfig struct {
App App `mapstructure:"app"`
Jwt Jwt `mapstructure:"app"`
Log log.Conf `mapstructure:"log"`
Mysql Mysql `mapstructure:"mysql"`
Redis redis.RedisConfig `mapstructure:"redis"`
}
func (a *AppConfig) GetVersion() string {
return a.App.Version
}
func LoadConfig(fPath string) (*AppConfig, error) {
viper.SetConfigFile(fPath)
viper.SetConfigType("yaml")
if err := viper.ReadInConfig(); err != nil {
return nil, err
}
config := AppConfig{}
if err := viper.Unmarshal(&config); err != nil {
return nil, err
}
defaultConfig := defaultConfig()
if err := mergo.Merge(&config, defaultConfig); err != nil {
return nil, err
}
return &config, nil
}
func defaultConfig() *AppConfig {
return &AppConfig{
App: App{
Name: "test",
Code: "test",
Host: "test",
Port: 9001,
Version: "v1.0.0",
},
Jwt: Jwt{
Expires: 7100,
Secret: "test",
},
}
}
func (m *Mysql) TransDns() string {
buf := bytes.Buffer{}
buf.WriteString(m.User)
buf.WriteString(":")
buf.WriteString(m.Password)
buf.WriteString("@tcp(")
buf.WriteString(m.Host)
buf.WriteString(":")
buf.WriteString(strconv.Itoa(m.Port))
buf.WriteString(")/")
if m.Database != "" {
buf.WriteString(m.Database)
}
buf.WriteString("?parseTime=true")
buf.WriteString("&loc=Local")
buf.WriteString("&timeout=3s") //设置连接超时时间
return buf.String()
}
// type Redis struct {
// Prefix string `mapstructure:"prefix" json:"prefix"`
// Host string `mapstructure:"host" json:"host"`
// Port int `mapstructure:"post" json:"post"`
// DB int `mapstructure:"db" json:"db"`
// Password string `mapstructure:"password" json:"password"`
// }