Enhance database configuration to support multiple data sources
- Updated .env.example to include optional configuration for additional database instances. - Refactored DatabaseConfig in config.go to accommodate a default database and additional instances. - Implemented loadAdditionalDBConfigs function to dynamically load configurations for extra databases. - Modified InitDB function in database.go to establish connections for both default and additional databases. - Updated README.md to document the new configuration options for connecting to multiple databases.
This commit is contained in:
@@ -11,11 +11,38 @@ import (
|
||||
"gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
var DB *gorm.DB
|
||||
var (
|
||||
DB *gorm.DB
|
||||
additionalDBs map[string]*gorm.DB
|
||||
)
|
||||
|
||||
func InitDB() error {
|
||||
cfg := config.AppConfig.Database
|
||||
|
||||
defaultDB, err := openConnection(cfg.Default)
|
||||
if err != nil {
|
||||
return fmt.Errorf("连接数据库失败: %v", err)
|
||||
}
|
||||
DB = defaultDB
|
||||
log.Println("默认数据库连接成功")
|
||||
|
||||
if len(cfg.Additional) > 0 {
|
||||
additionalDBs = make(map[string]*gorm.DB)
|
||||
for name, instanceCfg := range cfg.Additional {
|
||||
conn, err := openConnection(instanceCfg)
|
||||
if err != nil {
|
||||
return fmt.Errorf("连接数据库[%s]失败: %v", name, err)
|
||||
}
|
||||
additionalDBs[strings.ToLower(name)] = conn
|
||||
log.Printf("数据库连接成功: %s\n", name)
|
||||
}
|
||||
} else {
|
||||
additionalDBs = nil
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func openConnection(cfg config.DatabaseInstanceConfig) (*gorm.DB, error) {
|
||||
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
|
||||
cfg.User,
|
||||
cfg.Password,
|
||||
@@ -24,17 +51,24 @@ func InitDB() error {
|
||||
cfg.DBName,
|
||||
)
|
||||
|
||||
var err error
|
||||
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
|
||||
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
|
||||
Logger: logger.Default.LogMode(logger.Info),
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("连接数据库失败: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
return db, nil
|
||||
}
|
||||
|
||||
log.Println("数据库连接成功")
|
||||
return nil
|
||||
func GetAdditionalDB(name string) (*gorm.DB, bool) {
|
||||
if name == "" || strings.EqualFold(name, "default") {
|
||||
return DB, DB != nil
|
||||
}
|
||||
if additionalDBs == nil {
|
||||
return nil, false
|
||||
}
|
||||
db, ok := additionalDBs[strings.ToLower(name)]
|
||||
return db, ok
|
||||
}
|
||||
|
||||
func AutoMigrate(models ...interface{}) error {
|
||||
|
||||
Reference in New Issue
Block a user