Nessuna descrizione
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

dbs_config.go 1.5KB

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