config.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package config
  2. import (
  3. "IotAdmin/core/config"
  4. "IotAdmin/core/config/source"
  5. "fmt"
  6. "log"
  7. )
  8. var (
  9. ExtendConfig interface{}
  10. _cfg *Settings
  11. )
  12. // Settings 兼容原先的配置结构
  13. type Settings struct {
  14. Settings Config `yaml:"settings"`
  15. callbacks []func()
  16. }
  17. // Config 配置集合
  18. type Config struct {
  19. Application *Application `yaml:"application"`
  20. Ssl *Ssl `yaml:"ssl"`
  21. Logger *Logger `yaml:"logger"`
  22. Jwt *Jwt `yaml:"jwt"`
  23. Database *Database `yaml:"database"`
  24. Databases *map[string]*Database `yaml:"databases"`
  25. Gen *Gen `yaml:"gen"`
  26. Cache *Cache `yaml:"cache"`
  27. Queue *Queue `yaml:"queue"`
  28. Locker *Locker `yaml:"locker"`
  29. Extend interface{} `yaml:"extend"`
  30. }
  31. func (e *Settings) OnChange() {
  32. e.init()
  33. log.Println("配置更改、重新加载")
  34. }
  35. func (e *Settings) Init() {
  36. e.init()
  37. log.Println("初始化配置")
  38. }
  39. func (e *Settings) init() {
  40. // 配置日志
  41. e.Settings.Logger.Setup()
  42. // 配置数据库
  43. e.Settings.setupDatabase()
  44. e.runCallback()
  45. }
  46. // 多数据库
  47. func (e *Config) setupDatabase() {
  48. if len(*e.Databases) == 0 {
  49. *e.Databases = map[string]*Database{
  50. "*": e.Database,
  51. }
  52. }
  53. }
  54. // 执行回调
  55. func (e *Settings) runCallback() {
  56. for i := range e.callbacks {
  57. e.callbacks[i]()
  58. }
  59. }
  60. // Setup 载入配置文件
  61. func Setup(s source.Source, fs ...func()) {
  62. _cfg = &Settings{
  63. Settings: Config{
  64. Application: ApplicationConfig,
  65. Ssl: SslConfig,
  66. Logger: LoggerConfig,
  67. Jwt: JwtConfig,
  68. Database: DatabaseConfig,
  69. Databases: &DatabasesConfig,
  70. Gen: GenConfig,
  71. Cache: CacheConfig,
  72. Queue: QueueConfig,
  73. Locker: LockerConfig,
  74. Extend: ExtendConfig,
  75. },
  76. callbacks: fs,
  77. }
  78. var err error
  79. config.DefaultConfig, err = config.NewConfig(
  80. config.WithSource(s),
  81. config.WithEntity(_cfg),
  82. )
  83. if err != nil {
  84. log.Fatal(fmt.Sprintf("新建配置对象失败: %s", err.Error()))
  85. }
  86. _cfg.Init()
  87. }