| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package driver
-
- import (
- "fmt"
- "time" // 添加 time 包导入
-
- "github.com/jmoiron/sqlx"
- )
-
- // DBConfig 数据库配置
- type DBConfig struct {
- Type string `yaml:"type"`
- Host string `yaml:"host"`
- Port int `yaml:"port"`
- Username string `yaml:"username"`
- Password string `yaml:"password"`
- Database string `yaml:"database"`
- MaxOpenConns int `yaml:"max_open_conns"`
- MaxIdleConns int `yaml:"max_idle_conns"`
- ConnMaxLifetime int `yaml:"conn_max_lifetime"` // 单位:秒
- }
-
- // DBDriver 数据库驱动接口
- type DBDriver interface {
- // Name 返回驱动名称
- Name() string
- // Open 打开数据库连接
- Open(config DBConfig) (*sqlx.DB, error)
- // BuildDSN 构建连接字符串
- BuildDSN(config DBConfig) string
- }
-
- var driverss = make(map[string]DBDriver)
-
- // Register 注册数据库驱动
- func Register(driver DBDriver) {
- if driver == nil {
- panic("db driver: Register driver is nil")
- }
- name := driver.Name()
- if _, dup := driverss[name]; dup {
- panic("db driver: Register called twice for driver " + name)
- }
- driverss[name] = driver
- }
-
- // Get 获取数据库驱动
- func Get(name string) (DBDriver, error) {
- driver, exists := driverss[name]
- if !exists {
- return nil, fmt.Errorf("db driver: unknown driver %q", name)
- }
- return driver, nil
- }
-
- // GetAllDrivers 获取所有已注册的驱动名称
- func GetAllDrivers() []string {
- names := make([]string, 0, len(driverss))
- for name := range driverss {
- names = append(names, name)
- }
- return names
- }
-
- // configureConnectionPool 配置连接池的公共函数
- func configureConnectionPool(db *sqlx.DB, config DBConfig) {
- if config.MaxOpenConns > 0 {
- db.SetMaxOpenConns(config.MaxOpenConns)
- }
- if config.MaxIdleConns > 0 {
- db.SetMaxIdleConns(config.MaxIdleConns)
- }
- if config.ConnMaxLifetime > 0 {
- // 将秒转换为 time.Duration
- db.SetConnMaxLifetime(time.Duration(config.ConnMaxLifetime) * time.Second)
- }
- }
|