Нет описания
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package driver
  2. import (
  3. "fmt"
  4. "time" // 添加 time 包导入
  5. "github.com/jmoiron/sqlx"
  6. )
  7. // DBConfig 数据库配置
  8. type DBConfig struct {
  9. Type string `yaml:"type"`
  10. Host string `yaml:"host"`
  11. Port int `yaml:"port"`
  12. Username string `yaml:"username"`
  13. Password string `yaml:"password"`
  14. Database string `yaml:"database"`
  15. MaxOpenConns int `yaml:"max_open_conns"`
  16. MaxIdleConns int `yaml:"max_idle_conns"`
  17. ConnMaxLifetime int `yaml:"conn_max_lifetime"` // 单位:秒
  18. }
  19. // DBDriver 数据库驱动接口
  20. type DBDriver interface {
  21. // Name 返回驱动名称
  22. Name() string
  23. // Open 打开数据库连接
  24. Open(config DBConfig) (*sqlx.DB, error)
  25. // BuildDSN 构建连接字符串
  26. BuildDSN(config DBConfig) string
  27. }
  28. var driverss = make(map[string]DBDriver)
  29. // Register 注册数据库驱动
  30. func Register(driver DBDriver) {
  31. if driver == nil {
  32. panic("db driver: Register driver is nil")
  33. }
  34. name := driver.Name()
  35. if _, dup := driverss[name]; dup {
  36. panic("db driver: Register called twice for driver " + name)
  37. }
  38. driverss[name] = driver
  39. }
  40. // Get 获取数据库驱动
  41. func Get(name string) (DBDriver, error) {
  42. driver, exists := driverss[name]
  43. if !exists {
  44. return nil, fmt.Errorf("db driver: unknown driver %q", name)
  45. }
  46. return driver, nil
  47. }
  48. // GetAllDrivers 获取所有已注册的驱动名称
  49. func GetAllDrivers() []string {
  50. names := make([]string, 0, len(driverss))
  51. for name := range driverss {
  52. names = append(names, name)
  53. }
  54. return names
  55. }
  56. // configureConnectionPool 配置连接池的公共函数
  57. func configureConnectionPool(db *sqlx.DB, config DBConfig) {
  58. if config.MaxOpenConns > 0 {
  59. db.SetMaxOpenConns(config.MaxOpenConns)
  60. }
  61. if config.MaxIdleConns > 0 {
  62. db.SetMaxIdleConns(config.MaxIdleConns)
  63. }
  64. if config.ConnMaxLifetime > 0 {
  65. // 将秒转换为 time.Duration
  66. db.SetConnMaxLifetime(time.Duration(config.ConnMaxLifetime) * time.Second)
  67. }
  68. }