feat: 添加系统配置信息:运行端口,dbType
This commit is contained in:
+7
-4
@@ -1,7 +1,10 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
type Server struct {
|
type Config struct {
|
||||||
Mysql Mysql `mapstructure:"mysql" json:"mysql" yaml:"mysql"`
|
System System `mapstructure:"system" json:"system" yaml:"system"`
|
||||||
Redis Redis `mapstructure:"redis" json:"redis" yaml:"redis"`
|
Mysql Mysql `mapstructure:"mysql" json:"mysql" yaml:"mysql"`
|
||||||
Zap Zap `mapstructure:"zap" json:"zap" yaml:"zap"`
|
Pgsql Pgsql `mapstructure:"pgsql" json:"pgsql" yaml:"pgsql"`
|
||||||
|
Sqlite Sqlite `mapstructure:"sqlite" json:"sqlite" yaml:"sqlite"`
|
||||||
|
Redis Redis `mapstructure:"redis" json:"redis" yaml:"redis"`
|
||||||
|
Zap Zap `mapstructure:"zap" json:"zap" yaml:"zap"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"gorm.io/gorm/logger"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DsnProvider interface {
|
||||||
|
Dsn() string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Embeded 结构体可以压平到上一层,从而保持 config 文件的结构和原来一样
|
||||||
|
// 见 playground: https://go.dev/play/p/KIcuhqEoxmY
|
||||||
|
|
||||||
|
// GeneralDB 也被 Pgsql 和 Mysql 原样使用
|
||||||
|
type GeneralDB struct {
|
||||||
|
Prefix string `mapstructure:"prefix" json:"prefix" yaml:"prefix"` // 数据库前缀
|
||||||
|
Port string `mapstructure:"port" json:"port" yaml:"port"` // 数据库端口
|
||||||
|
Config string `mapstructure:"config" json:"config" yaml:"config"` // 高级配置
|
||||||
|
Dbname string `mapstructure:"db-name" json:"db-name" yaml:"db-name"` // 数据库名
|
||||||
|
User string `mapstructure:"user" json:"user" yaml:"user"` // 数据库账号
|
||||||
|
Password string `mapstructure:"password" json:"password" yaml:"password"` // 数据库密码
|
||||||
|
Host string `mapstructure:"host" json:"host" yaml:"host"` // 数据库地址
|
||||||
|
Engine string `mapstructure:"engine" json:"engine" yaml:"engine" default:"InnoDB"` // 数据库引擎,默认InnoDB
|
||||||
|
LogMode string `mapstructure:"log-mode" json:"log-mode" yaml:"log-mode"` // 是否开启Gorm全局日志
|
||||||
|
MaxIdleConns int `mapstructure:"max-idle-conns" json:"max-idle-conns" yaml:"max-idle-conns"` // 空闲中的最大连接数
|
||||||
|
MaxOpenConns int `mapstructure:"max-open-conns" json:"max-open-conns" yaml:"max-open-conns"` // 打开到数据库的最大连接数
|
||||||
|
Singular bool `mapstructure:"singular" json:"singular" yaml:"singular"` // 是否开启全局禁用复数,true表示开启
|
||||||
|
LogZap bool `mapstructure:"log-zap" json:"log-zap" yaml:"log-zap"` // 是否通过zap写入日志文件
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c GeneralDB) LogLevel() logger.LogLevel {
|
||||||
|
switch strings.ToLower(c.LogMode) {
|
||||||
|
case "silent", "Silent":
|
||||||
|
return logger.Silent
|
||||||
|
case "error", "Error":
|
||||||
|
return logger.Error
|
||||||
|
case "warn", "Warn":
|
||||||
|
return logger.Warn
|
||||||
|
case "info", "Info":
|
||||||
|
return logger.Info
|
||||||
|
default:
|
||||||
|
return logger.Info
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type SpecializedDB struct {
|
||||||
|
Type string `mapstructure:"type" json:"type" yaml:"type"`
|
||||||
|
AliasName string `mapstructure:"alias-name" json:"alias-name" yaml:"alias-name"`
|
||||||
|
GeneralDB `yaml:",inline" mapstructure:",squash"`
|
||||||
|
Disable bool `mapstructure:"disable" json:"disable" yaml:"disable"`
|
||||||
|
}
|
||||||
+1
-13
@@ -1,19 +1,7 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
type Mysql struct {
|
type Mysql struct {
|
||||||
Prefix string `mapstructure:"prefix" json:"prefix" yaml:"prefix"` // 数据库前缀
|
GeneralDB `yaml:",inline" mapstructure:",squash"`
|
||||||
Port string `mapstructure:"port" json:"port" yaml:"port"` // 数据库端口
|
|
||||||
Config string `mapstructure:"config" json:"config" yaml:"config"` // 高级配置
|
|
||||||
Dbname string `mapstructure:"db-name" json:"db-name" yaml:"db-name"` // 数据库名
|
|
||||||
User string `mapstructure:"user" json:"user" yaml:"user"` // 数据库账号
|
|
||||||
Password string `mapstructure:"password" json:"password" yaml:"password"` // 数据库密码
|
|
||||||
Host string `mapstructure:"host" json:"host" yaml:"host"` // 数据库地址
|
|
||||||
Engine string `mapstructure:"engine" json:"engine" yaml:"engine" default:"InnoDB"` // 数据库引擎,默认InnoDB
|
|
||||||
LogMode string `mapstructure:"log-mode" json:"log-mode" yaml:"log-mode"` // 是否开启Gorm全局日志
|
|
||||||
MaxIdleConns int `mapstructure:"max-idle-conns" json:"max-idle-conns" yaml:"max-idle-conns"` // 空闲中的最大连接数
|
|
||||||
MaxOpenConns int `mapstructure:"max-open-conns" json:"max-open-conns" yaml:"max-open-conns"` // 打开到数据库的最大连接数
|
|
||||||
Singular bool `mapstructure:"singular" json:"singular" yaml:"singular"` // 是否开启全局禁用复数,true表示开启
|
|
||||||
LogZap bool `mapstructure:"log-zap" json:"log-zap" yaml:"log-zap"` // 是否通过zap写入日志文件
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Mysql) Dsn() string {
|
func (m *Mysql) Dsn() string {
|
||||||
|
|||||||
+3
-15
@@ -1,29 +1,17 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
type Pgsql struct {
|
type Pgsql struct {
|
||||||
Prefix string `mapstructure:"prefix" json:"prefix" yaml:"prefix"` // 数据库前缀
|
GeneralDB `yaml:",inline" mapstructure:",squash"`
|
||||||
Port string `mapstructure:"port" json:"port" yaml:"port"` // 数据库端口
|
|
||||||
Config string `mapstructure:"config" json:"config" yaml:"config"` // 高级配置
|
|
||||||
Dbname string `mapstructure:"db-name" json:"db-name" yaml:"db-name"` // 数据库名
|
|
||||||
User string `mapstructure:"user" json:"user" yaml:"user"` // 数据库账号
|
|
||||||
Password string `mapstructure:"password" json:"password" yaml:"password"` // 数据库密码
|
|
||||||
Path string `mapstructure:"path" json:"path" yaml:"path"` // 数据库地址
|
|
||||||
Engine string `mapstructure:"engine" json:"engine" yaml:"engine" default:"InnoDB"` // 数据库引擎,默认InnoDB
|
|
||||||
LogMode string `mapstructure:"log-mode" json:"log-mode" yaml:"log-mode"` // 是否开启Gorm全局日志
|
|
||||||
MaxIdleConns int `mapstructure:"max-idle-conns" json:"max-idle-conns" yaml:"max-idle-conns"` // 空闲中的最大连接数
|
|
||||||
MaxOpenConns int `mapstructure:"max-open-conns" json:"max-open-conns" yaml:"max-open-conns"` // 打开到数据库的最大连接数
|
|
||||||
Singular bool `mapstructure:"singular" json:"singular" yaml:"singular"` // 是否开启全局禁用复数,true表示开启
|
|
||||||
LogZap bool `mapstructure:"log-zap" json:"log-zap" yaml:"log-zap"` // 是否通过zap写入日志文件
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dsn 基于配置文件获取 dsn
|
// Dsn 基于配置文件获取 dsn
|
||||||
// Author [SliverHorn](https://github.com/SliverHorn)
|
// Author [SliverHorn](https://github.com/SliverHorn)
|
||||||
func (p *Pgsql) Dsn() string {
|
func (p *Pgsql) Dsn() string {
|
||||||
return "host=" + p.Path + " user=" + p.User + " password=" + p.Password + " dbname=" + p.Dbname + " port=" + p.Port + " " + p.Config
|
return "host=" + p.Host + " user=" + p.User + " password=" + p.Password + " dbname=" + p.Dbname + " port=" + p.Port + " " + p.Config
|
||||||
}
|
}
|
||||||
|
|
||||||
// LinkDsn 根据 dbname 生成 dsn
|
// LinkDsn 根据 dbname 生成 dsn
|
||||||
// Author [SliverHorn](https://github.com/SliverHorn)
|
// Author [SliverHorn](https://github.com/SliverHorn)
|
||||||
func (p *Pgsql) LinkDsn(dbname string) string {
|
func (p *Pgsql) LinkDsn(dbname string) string {
|
||||||
return "host=" + p.Path + " user=" + p.User + " password=" + p.Password + " dbname=" + dbname + " port=" + p.Port + " " + p.Config
|
return "host=" + p.Host + " user=" + p.User + " password=" + p.Password + " dbname=" + dbname + " port=" + p.Port + " " + p.Config
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"path/filepath"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Sqlite struct {
|
||||||
|
GeneralDB `yaml:",inline" mapstructure:",squash"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Sqlite) Dsn() string {
|
||||||
|
return filepath.Join(s.Host, s.Dbname+".db")
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
type System struct {
|
||||||
|
Port int `mapstructure:"port" json:"port" yaml:"port"`
|
||||||
|
DbType string `mapstructure:"db-type" json:"db-type" yaml:"db-type"`
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user