説明なし
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

dbs_config.go 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package subconfigs
  2. import (
  3. "fmt"
  4. "log"
  5. )
  6. // DbsConfig 多数据库配置
  7. type DbsConfig struct {
  8. BaseConfig
  9. Databases map[string]*DbConfig `yaml:",inline"`
  10. }
  11. func (c *DbsConfig) SetDefaults() {
  12. for _, db := range c.Databases {
  13. SetDbDefaults(db)
  14. }
  15. }
  16. func (c *DbsConfig) Load(data map[string]interface{}) error {
  17. // 直接使用 LoadFromYAML,会自动处理嵌套的 map[string]*DbConfig
  18. return c.LoadFromYAML(data, c)
  19. }
  20. func (c *DbsConfig) Validate() error {
  21. if len(c.Databases) == 0 {
  22. return fmt.Errorf("未配置任何数据库")
  23. }
  24. for name, db := range c.Databases {
  25. if err := ValidateDbConfig(db); err != nil {
  26. return fmt.Errorf("数据库 '%s' 配置错误: %v", name, err)
  27. }
  28. }
  29. return nil
  30. }
  31. func (c *DbsConfig) IsConfigured() bool {
  32. if len(c.Databases) == 0 {
  33. log.Println("⚠️ 警告: 未配置任何数据库")
  34. return false
  35. }
  36. allConfigured := true
  37. for name, db := range c.Databases {
  38. if !IsDbConfigured(db, name) {
  39. allConfigured = false
  40. }
  41. }
  42. return allConfigured
  43. }
  44. // Get 获取指定名称的数据库配置
  45. func (c *DbsConfig) GetDbConfig(name string) (*DbConfig, bool) {
  46. db, exists := c.Databases[name]
  47. return db, exists
  48. }
  49. // Default 获取第一个数据库配置
  50. func (c *DbsConfig) Default() *DbConfig {
  51. for _, db := range c.Databases {
  52. return db
  53. }
  54. return nil
  55. }
  56. func init() {
  57. Register("dbs", &DbsConfig{})
  58. }