gin-base/db/config/database.go

96 lines
2.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
}