96 lines
2.8 KiB
Go
96 lines
2.8 KiB
Go
package config
|
||
|
||
import (
|
||
"fmt"
|
||
|
||
"git.magicany.cc/black1552/gin-base/db/core"
|
||
"gopkg.in/yaml.v3"
|
||
)
|
||
|
||
// NewDatabaseFromConfig 从配置文件创建数据库连接(已废弃,请使用 AutoConnect)
|
||
// Deprecated: 使用 AutoConnect 代替
|
||
func NewDatabaseFromConfig(configPath string, debug bool) (*core.Database, error) {
|
||
return autoConnectWithConfig(configPath, debug)
|
||
}
|
||
|
||
// AutoConnect 自动查找配置文件并创建数据库连接
|
||
// 会在当前目录及上级目录中查找 config.yaml, config.toml, config.ini, config.json 等文件
|
||
func AutoConnect(debug bool) (*core.Database, error) {
|
||
// 自动查找配置文件
|
||
configPath, err := FindConfigFile("")
|
||
if err != nil {
|
||
return nil, fmt.Errorf("查找配置文件失败:%w", err)
|
||
}
|
||
|
||
return autoConnectWithConfig(configPath, debug)
|
||
}
|
||
|
||
// AutoConnectWithDir 在指定目录自动查找配置文件并创建数据库连接
|
||
func AutoConnectWithDir(dir string, debug bool) (*core.Database, error) {
|
||
configPath, err := FindConfigFile(dir)
|
||
if err != nil {
|
||
return nil, fmt.Errorf("查找配置文件失败:%w", err)
|
||
}
|
||
|
||
return autoConnectWithConfig(configPath, debug)
|
||
}
|
||
|
||
// autoConnectWithConfig 根据配置文件创建数据库连接(内部使用)
|
||
func autoConnectWithConfig(configPath string, debug bool) (*core.Database, error) {
|
||
// 从文件加载配置
|
||
configFile, err := LoadFromFile(configPath)
|
||
if err != nil {
|
||
return nil, fmt.Errorf("加载配置失败:%w", err)
|
||
}
|
||
|
||
// 构建核心数据库配置
|
||
dbConfig := &core.Config{
|
||
DriverName: configFile.Database.GetDriverName(),
|
||
DataSource: configFile.Database.BuildDSN(),
|
||
Debug: debug,
|
||
MaxIdleConns: 10,
|
||
MaxOpenConns: 100,
|
||
ConnMaxLifetime: 3600000000000, // 1 小时
|
||
TimeConfig: core.DefaultTimeConfig(), // 使用默认时间配置
|
||
}
|
||
|
||
// 创建数据库连接
|
||
db, err := core.NewDatabase(dbConfig)
|
||
if err != nil {
|
||
return nil, fmt.Errorf("创建数据库连接失败:%w", err)
|
||
}
|
||
|
||
return db, nil
|
||
}
|
||
|
||
// NewDatabaseFromYAML 从 YAML 内容创建数据库连接
|
||
func NewDatabaseFromYAML(yamlContent []byte, debug bool) (*core.Database, error) {
|
||
var configFile Config
|
||
if err := yaml.Unmarshal(yamlContent, &configFile); err != nil {
|
||
return nil, fmt.Errorf("解析 YAML 失败:%w", err)
|
||
}
|
||
|
||
if err := configFile.Validate(); err != nil {
|
||
return nil, fmt.Errorf("验证配置失败:%w", err)
|
||
}
|
||
|
||
// 构建核心数据库配置
|
||
dbConfig := &core.Config{
|
||
DriverName: configFile.Database.GetDriverName(),
|
||
DataSource: configFile.Database.BuildDSN(),
|
||
Debug: debug,
|
||
MaxIdleConns: 10,
|
||
MaxOpenConns: 100,
|
||
ConnMaxLifetime: 3600000000000, // 1 小时
|
||
TimeConfig: core.DefaultTimeConfig(),
|
||
}
|
||
|
||
// 创建数据库连接
|
||
db, err := core.NewDatabase(dbConfig)
|
||
if err != nil {
|
||
return nil, fmt.Errorf("创建数据库连接失败:%w", err)
|
||
}
|
||
|
||
return db, nil
|
||
}
|