databasemgr

package
v0.0.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 24, 2026 License: BSD-2-Clause Imports: 27 Imported by: 0

README

databasemgr - 数据库管理器

提供统一的数据库管理功能,基于 GORM 支持 MySQL、PostgreSQL 和 SQLite。

特性

  • 多数据库支持 - MySQL、PostgreSQL、SQLite 和 None(空实现,用于测试)
  • 统一接口 - 完全基于 GORM,提供 IDatabaseManager 统一接口
  • 连接池管理 - 统一的连接池配置和统计监控
  • 可观测性集成 - 内置日志、链路追踪和指标收集(支持 OpenTelemetry)
  • 事务管理 - 支持自动事务和手动事务
  • 自动迁移 - 基于 GORM 的数据库 Schema 迁移能力
  • 配置驱动 - 支持通过配置提供者创建实例
  • 依赖注入 - 集成日志管理器和可观测性管理器

快速开始

import (
    "github.com/lite-lake/litecore-go/manager/databasemgr"
)

// 使用工厂函数创建
cfg := map[string]any{
    "dsn": "root:password@tcp(localhost:3306)/mydb?charset=utf8mb4&parseTime=True&loc=Local",
}

dbMgr, err := databasemgr.Build("mysql", cfg, nil, nil)
if err != nil {
    log.Fatal(err)
}
defer dbMgr.Close()

// 定义模型
type User struct {
    ID   uint   `gorm:"primarykey"`
    Name string `gorm:"size:255"`
}

// 自动迁移
dbMgr.AutoMigrate(&User{})

// 创建记录
dbMgr.DB().Create(&User{Name: "Alice"})

// 查询记录
var user User
dbMgr.DB().First(&user, 1)

创建管理器

使用 Build 函数
// MySQL
mysqlCfg := map[string]any{
    "dsn": "root:password@tcp(localhost:3306)/mydb?charset=utf8mb4&parseTime=True&loc=Local",
}
dbMgr, err := databasemgr.Build("mysql", mysqlCfg, loggerMgr, telemetryMgr)

// PostgreSQL
postgresqlCfg := map[string]any{
    "dsn": "host=localhost port=5432 user=postgres password=password dbname=mydb sslmode=disable",
}
dbMgr, err := databasemgr.Build("postgresql", postgresqlCfg, loggerMgr, telemetryMgr)

// SQLite
sqliteCfg := map[string]any{
    "dsn": "file:./cache.db?cache=shared&mode=rwc",
}
dbMgr, err := databasemgr.Build("sqlite", sqliteCfg, loggerMgr, telemetryMgr)

// None(空实现,用于测试)
dbMgr := databasemgr.NewDatabaseManagerNoneImpl(loggerMgr, telemetryMgr)
使用 BuildWithConfigProvider

从配置提供者读取配置,适合依赖注入场景:

import "github.com/lite-lake/litecore-go/manager/configmgr"

provider, err := configmgr.Build("yaml", "config.yaml")
if err != nil {
    log.Fatal(err)
}

dbMgr, err := databasemgr.BuildWithConfigProvider(provider, loggerMgr, telemetryMgr)
if err != nil {
    log.Fatal(err)
}
defer dbMgr.Close()

配置文件示例(YAML):

database:
  driver: mysql

  mysql_config:
    dsn: "root:password@tcp(localhost:3306)/mydb?charset=utf8mb4&parseTime=True&loc=Local"
    pool_config:
      max_open_conns: 100
      max_idle_conns: 10
      conn_max_lifetime: 3600
      conn_max_idle_time: 600

  observability_config:
    slow_query_threshold: 1s
    log_sql: false
    sample_rate: 1.0
使用构造函数
// MySQL
mysqlCfg := &databasemgr.MySQLConfig{
    DSN: "root:password@tcp(localhost:3306)/mydb?charset=utf8mb4&parseTime=True&loc=Local",
    PoolConfig: &databasemgr.PoolConfig{
        MaxOpenConns:    100,
        MaxIdleConns:    10,
        ConnMaxLifetime: 3600 * time.Second,
        ConnMaxIdleTime: 600 * time.Second,
    },
}
dbMgr, err := databasemgr.NewDatabaseManagerMySQLImpl(mysqlCfg, loggerMgr, telemetryMgr)

GORM 核心

获取 DB 实例
db := dbMgr.DB()

// 简单查询
var user User
db.First(&user, 1)

// 条件查询
db.Where("name = ?", "Alice").First(&user)

// 创建记录
db.Create(&User{Name: "Bob"})

// 更新记录
db.Model(&user).Update("Name", "Charlie")

// 删除记录
db.Delete(&user)
指定模型和表
// 使用 Model 方法
dbMgr.Model(&User{}).Where("age > ?", 18).Find(&users)

// 使用 Table 方法
dbMgr.Table("users").Count(&count)
使用上下文
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

dbMgr.WithContext(ctx).Find(&users)

事务管理

自动事务
err := dbMgr.Transaction(func(tx *gorm.DB) error {
    if err := tx.Create(&User{Name: "Alice"}).Error; err != nil {
        return err // 返回错误会触发回滚
    }
    if err := tx.Create(&Order{UserID: 1}).Error; err != nil {
        return err // 返回错误会触发回滚
    }
    return nil // 返回 nil 会提交事务
})
手动事务
tx := dbMgr.Begin()
if err := tx.Create(&User{Name: "Bob"}).Error; err != nil {
    tx.Rollback()
    log.Fatal(err)
}
tx.Commit()

迁移管理

自动迁移
dbMgr.AutoMigrate(&User{}, &Product{}, &Order{})
使用 Migrator
migrator := dbMgr.Migrator()

// 检查表是否存在
if migrator.HasTable(&User{}) {
    log.Println("Users table exists")
}

// 创建/删除/重命名表
migrator.CreateTable(&User{})
migrator.DropTable(&User{})
migrator.RenameTable(&User{}, "users_new")

// 添加列
migrator.AddColumn(&User{}, "Email")

连接管理

健康检查
if err := dbMgr.Health(); err != nil {
    log.Error("database health check failed", err)
}
Ping 检查
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

if err := dbMgr.Ping(ctx); err != nil {
    log.Error("database ping failed", err)
}
连接池统计
stats := dbMgr.Stats()
log.Printf("OpenConnections: %d", stats.OpenConnections)
log.Printf("InUse: %d", stats.InUse)
log.Printf("Idle: %d", stats.Idle)

可观测性

databasemgr 内置了完整的可观测性功能,包括慢查询日志、SQL 日志、指标收集和链路追踪。

慢查询日志

当查询耗时超过 slow_query_threshold 时,自动记录慢查询日志:

// 配置慢查询阈值为 1 秒
observability_config:
  slow_query_threshold: "1s"

慢查询日志示例:

2026-01-24 15:04:05.456 | WARN  | 慢查询检测 | operation=query table=users duration=1.2s threshold=1s
SQL 日志

启用 log_sql 可以记录完整的 SQL 语句(生产环境建议关闭):

observability_config:
  log_sql: true

SQL 日志会自动进行脱敏处理,隐藏密码、token 等敏感信息:

// 原始 SQL: SELECT * FROM users WHERE password = 'secret123'
// 脱敏后:   SELECT * FROM users WHERE password = '***'

支持的脱敏字段:

  • password、pwd
  • token
  • secret
  • api_key
指标收集

自动收集以下指标:

指标名称 类型 说明
db.query.duration Histogram 查询耗时(秒)
db.query.count Counter 查询计数
db.query.error_count Counter 错误计数
db.query.slow_count Counter 慢查询计数
db.transaction.count Counter 事务计数
db.connection.pool Gauge 连接池状态

指标包含以下属性:

  • operation - 操作类型(query、create、update、delete)
  • table - 表名
  • status - 状态(success、error)
链路追踪

自动为所有数据库操作创建链路追踪 Span,支持 OpenTelemetry:

Span 名称: db.{operation}
属性:
  - db.operation: 操作类型
  - db.table: 表名
采样率

通过 sample_rate 控制可观测性数据采集频率,减少性能开销:

observability_config:
  sample_rate: 0.1  # 仅采集 10% 的数据
日志级别

不同级别的数据库操作使用不同的日志级别:

级别 场景 示例
Debug 正常操作成功 database operation success
Warn 慢查询 slow database query detected
Error 操作失败 database operation failed
可观测性配置示例
database:
  driver: mysql
  mysql_config:
    dsn: "root:password@tcp(localhost:3306)/mydb"
  observability_config:
    slow_query_threshold: "1s"  # 超过 1 秒的查询记录为慢查询
    log_sql: false               # 生产环境建议关闭
    sample_rate: 1.0             # 采样率 100%
可观测性配置结构
type ObservabilityConfig struct {
    SlowQueryThreshold time.Duration // 慢查询阈值,0 表示不记录慢查询
    LogSQL             bool          // 是否记录完整 SQL(生产环境建议关闭)
    SampleRate         float64       // 采样率 (0.0-1.0)
}

支持的数据库

MySQL
database:
  driver: mysql
  mysql_config:
    dsn: "user:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
    pool_config:
      max_open_conns: 100
      max_idle_conns: 10
      conn_max_lifetime: "30s"
      conn_max_idle_time: "5m"
  observability_config:
    slow_query_threshold: "1s"
    log_sql: false
    sample_rate: 1.0
PostgreSQL
database:
  driver: postgresql
  postgresql_config:
    dsn: "host=localhost port=5432 user=postgres password=password dbname=dbname sslmode=disable"
    pool_config:
      max_open_conns: 50
      max_idle_conns: 10
      conn_max_lifetime: "30s"
      conn_max_idle_time: "5m"
  observability_config:
    slow_query_threshold: "1s"
    log_sql: false
    sample_rate: 1.0
SQLite
database:
  driver: sqlite
  sqlite_config:
    dsn: "file:./data.db?cache=shared&mode=rwc"
    pool_config:
      max_open_conns: 1  # SQLite 通常设置为 1
      max_idle_conns: 1
      conn_max_lifetime: "30s"
      conn_max_idle_time: "5m"
  observability_config:
    slow_query_threshold: "1s"
    log_sql: false
    sample_rate: 1.0
None(空实现)
database:
  driver: none

用于测试场景,所有操作都是空操作。

API

工厂函数
func Build(driverType string, driverConfig map[string]any, loggerMgr loggermgr.ILoggerManager, telemetryMgr telemetrymgr.ITelemetryManager) (IDatabaseManager, error)
func BuildWithConfigProvider(configProvider configmgr.IConfigManager, loggerMgr loggermgr.ILoggerManager, telemetryMgr telemetrymgr.ITelemetryManager) (IDatabaseManager, error)
构造函数
func NewDatabaseManagerMySQLImpl(cfg *MySQLConfig, loggerMgr loggermgr.ILoggerManager, telemetryMgr telemetrymgr.ITelemetryManager) (IDatabaseManager, error)
func NewDatabaseManagerPostgreSQLImpl(cfg *PostgreSQLConfig, loggerMgr loggermgr.ILoggerManager, telemetryMgr telemetrymgr.ITelemetryManager) (IDatabaseManager, error)
func NewDatabaseManagerSQLiteImpl(cfg *SQLiteConfig, loggerMgr loggermgr.ILoggerManager, telemetryMgr telemetrymgr.ITelemetryManager) (IDatabaseManager, error)
func NewDatabaseManagerNoneImpl(loggerMgr loggermgr.ILoggerManager, telemetryMgr telemetrymgr.ITelemetryManager) IDatabaseManager
IDatabaseManager 接口
GORM 核心
DB() *gorm.DB
Model(value any) *gorm.DB
Table(name string) *gorm.DB
WithContext(ctx context.Context) *gorm.DB
事务管理
Transaction(fn func(*gorm.DB) error, opts ...*sql.TxOptions) error
Begin(opts ...*sql.TxOptions) *gorm.DB
迁移管理
AutoMigrate(models ...any) error
Migrator() gorm.Migrator
连接管理
Driver() string
Ping(ctx context.Context) error
Stats() sql.DBStats
Close() error
原生 SQL
Exec(sql string, values ...any) *gorm.DB
Raw(sql string, values ...any) *gorm.DB

配置

DatabaseConfig
type DatabaseConfig struct {
    Driver              string               // 驱动类型: mysql, postgresql, sqlite, none
    SQLiteConfig        *SQLiteConfig        // SQLite 配置
    PostgreSQLConfig    *PostgreSQLConfig    // PostgreSQL 配置
    MySQLConfig         *MySQLConfig         // MySQL 配置
    ObservabilityConfig *ObservabilityConfig // 可观测性配置
    AutoMigrate         bool                 // 是否自动迁移数据库表结构
}
PoolConfig
type PoolConfig struct {
    MaxOpenConns    int           // 最大打开连接数,0 表示无限制
    MaxIdleConns    int           // 最大空闲连接数
    ConnMaxLifetime time.Duration // 连接最大存活时间
    ConnMaxIdleTime time.Duration // 连接最大空闲时间
}
ObservabilityConfig
type ObservabilityConfig struct {
    SlowQueryThreshold time.Duration // 慢查询阈值
    LogSQL             bool          // 是否记录完整 SQL(生产环境建议关闭)
    SampleRate         float64       // 采样率 (0.0-1.0)
}
MySQLConfig
type MySQLConfig struct {
    DSN        string      // MySQL DSN
    PoolConfig *PoolConfig // 连接池配置(可选)
}
PostgreSQLConfig
type PostgreSQLConfig struct {
    DSN        string      // PostgreSQL DSN
    PoolConfig *PoolConfig // 连接池配置(可选)
}
SQLiteConfig
type SQLiteConfig struct {
    DSN        string      // SQLite DSN
    PoolConfig *PoolConfig // 连接池配置(可选)
}

最佳实践

连接池配置
  • MySQL/PostgreSQL:MaxOpenConns 设置为 CPU 核心数的 2-4 倍
  • SQLite:MaxOpenConns 通常设置为 1,避免写锁冲突
  • 使用 Stats() 定期检查连接池状态
事务使用
  • 优先使用 Transaction 方法
  • 保持事务简短,避免长时间持有锁
  • 在事务中避免外部调用
DSN 格式

MySQLuser:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local

PostgreSQLhost=localhost port=5432 user=postgres password=password dbname=dbname sslmode=disable

SQLitefile:./cache.db?cache=shared&mode=rwc

可观测性配置
  • 生产环境:关闭 log_sql,设置适当的 slow_query_threshold(如 1s)
  • 开发环境:开启 log_sql,设置较短的慢查询阈值(如 100ms)
  • 高并发场景:适当降低 sample_rate(如 0.1),减少性能开销

在 Repository 中使用

type messageRepositoryImpl struct {
    Config  configmgr.IConfigManager     `inject:""`
    Manager databasemgr.IDatabaseManager `inject:""`
}

func (r *messageRepositoryImpl) GetByID(id uint) (*Message, error) {
    db := r.Manager.DB()
    var message Message
    err := db.First(&message, id).Error
    if err != nil {
        return nil, err
    }
    return &message, nil
}

func (r *messageRepositoryImpl) Create(message *Message) error {
    db := r.Manager.DB()
    return db.Create(message).Error
}

func (r *messageRepositoryImpl) GetApprovedMessages() ([]*Message, error) {
    db := r.Manager.DB()
    var messages []*Message
    err := db.Where("status = ?", "approved").
        Order("created_at DESC").
        Find(&messages).Error
    return messages, err
}

Documentation

Overview

Example (Databasemgr_advancedOperations)

Example_databasemgr_advancedOperations 演示高级数据库操作

package main

import (
	"github.com/lite-lake/litecore-go/manager/databasemgr"
)

func main() {
	// 假设已经创建了 dbMgr
	var dbMgr databasemgr.IDatabaseManager

	// 1. 自动迁移
	// err := dbMgr.AutoMigrate(&User{}, &Product{}, &Order{})

	// 2. 原生 SQL 查询
	// var results []map[string]interface{}
	// dbMgr.Raw("SELECT * FROM users WHERE age > ?", 18).Scan(&results)

	// 3. 执行原生 SQL
	// dbMgr.Exec("UPDATE users SET status = ? WHERE id = ?", "active", 1)

	// 4. 使用上下文(支持超时控制)
	// ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	// defer cancel()
	// dbMgr.WithContext(ctx).Find(&users)

	// 5. 获取连接池统计信息
	// stats := dbMgr.Stats()
	// fmt.Printf("OpenConnections: %d\n", stats.OpenConnections)
	// fmt.Printf("InUse: %d\n", stats.InUse)

	// 6. 健康检查
	// if err := dbMgr.Health(); err != nil {
	//     loggerMgr := loggermgr.GetLoggerManager()
	//     loggerMgr.Logger("main").Error("Database health check failed", "error", err)
	// }

	_ = dbMgr
}
Example (Databasemgr_basicOperations)

Example_databasemgr_basicOperations 演示基本的数据库操作

package main

import (
	"github.com/lite-lake/litecore-go/manager/databasemgr"
)

func main() {
	// 假设已经创建了 dbMgr
	var dbMgr databasemgr.IDatabaseManager

	// 1. 简单查询
	// type User struct {
	//     ID   uint
	//     Name string
	// }
	// var user User
	// dbMgr.DB().First(&user, 1)

	// 2. 创建记录
	// user := User{Name: "John"}
	// dbMgr.DB().Create(&user)

	// 3. 更新记录
	// dbMgr.DB().Model(&user).Update("Name", "Jane")

	// 4. 删除记录
	// dbMgr.DB().Delete(&user)

	// 5. 事务操作
	// err := dbMgr.Transaction(func(tx *gorm.DB) error {
	//     if err := tx.Create(&User{Name: "Alice"}).Error; err != nil {
	//         return err  // 会回滚
	//     }
	//     return nil  // 提交
	// })

	_ = dbMgr
}
Example (Databasemgr_configuration)

Example_databasemgr_configuration 演示配置格式

package main

import ()

func main() {
	// 配置文件示例(YAML 格式):
	//
	// database:
	//   driver: mysql
	//   mysql_config:
	//     dsn: "root:password@tcp(localhost:3306)/mydb?charset=utf8mb4&parseTime=True&loc=Local"
	//     pool_config:
	//       max_open_conns: 100
	//       max_idle_conns: 10
	//       conn_max_lifetime: 3600  # 秒
	//       conn_max_idle_time: 600   # 秒
	//
	// 或者使用 PostgreSQL 数据库:
	//
	// database:
	//   driver: postgresql
	//   postgresql_config:
	//     dsn: "host=localhost port=5432 user=postgres password=password dbname=mydb sslmode=disable"
	//     pool_config:
	//       max_open_conns: 50
	//       max_idle_conns: 10
	//
	// 或者使用 SQLite 数据库:
	//
	// database:
	//   driver: sqlite
	//   sqlite_config:
	//     dsn: "file:./cache.db?cache=shared&mode=rwc"
}
Example (Databasemgr_withConfigProvider)

Example_databasemgr_withConfigProvider 演示如何使用 ConfigMgr 创建 IDatabaseManager

package main

import ()

func main() {
	// 方式2: 使用 ConfigMgr(推荐用于依赖注入场景)
	// import loggermgr "github.com/lite-lake/litecore-go/component/manager/loggermgr"
	// provider := configmgr.NewYamlConfigProvider("config.yaml")
	// dbMgr, err := databasemgr.BuildWithConfigProvider(provider)
	// if err != nil {
	//     loggerMgr := loggermgr.GetLoggerManager()
	//     loggerMgr.Logger("main").Fatal("Failed to create database manager", "error", err)
	// }
	// defer dbMgr.Close()

	// 使用数据库
	// db := dbMgr.DB()
	// var users []User
	// db.Find(&users)
}
Example (Databasemgr_withFactory)

Example_databasemgr_withFactory 演示如何使用工厂模式创建 IDatabaseManager

package main

import (
	"github.com/lite-lake/litecore-go/manager/databasemgr"
)

func main() {
	// 方式1: 直接使用 Build 函数
	cfg := map[string]any{
		"dsn": ":memory:",
	}
	dbMgr, _ := databasemgr.Build("sqlite", cfg, nil, nil)
	defer dbMgr.Close()

	// 使用数据库
	// db := dbMgr.DB()
	// var users []User
	// db.Find(&users)

	_ = dbMgr
}

Index

Examples

Constants

View Source
const (
	// 默认连接池配置
	DefaultMaxOpenConns    = 10
	DefaultMaxIdleConns    = 5
	DefaultConnMaxLifetime = 30 * time.Second
	DefaultConnMaxIdleTime = 5 * time.Minute
)

Variables

This section is empty.

Functions

func ValidateContext

func ValidateContext(ctx context.Context) error

ValidateContext 验证上下文是否有效

func ValidateDSN

func ValidateDSN(dsn string) error

ValidateDSN 验证 DSN 是否有效

Types

type DatabaseConfig

type DatabaseConfig struct {
	Driver              string               `yaml:"driver"`               // 驱动类型: mysql, postgresql, sqlite, none
	SQLiteConfig        *SQLiteConfig        `yaml:"sqlite_config"`        // SQLite 配置
	PostgreSQLConfig    *PostgreSQLConfig    `yaml:"postgresql_config"`    // PostgreSQL 配置
	MySQLConfig         *MySQLConfig         `yaml:"mysql_config"`         // MySQL 配置
	ObservabilityConfig *ObservabilityConfig `yaml:"observability_config"` // 可观测性配置
	AutoMigrate         bool                 `yaml:"auto_migrate"`         // 是否自动迁移数据库表结构(默认 false)
}

DatabaseConfig 数据库管理配置

func DefaultConfig

func DefaultConfig() *DatabaseConfig

DefaultConfig 返回默认配置

func ParseDatabaseConfigFromMap

func ParseDatabaseConfigFromMap(cfg map[string]any) (*DatabaseConfig, error)

ParseDatabaseConfigFromMap 从 map 解析数据库配置

func (*DatabaseConfig) Validate

func (c *DatabaseConfig) Validate() error

Validate 验证配置

type IDatabaseManager

type IDatabaseManager interface {
	common.IBaseManager

	// ========== GORM 核心 ==========
	// DB 获取 GORM 数据库实例
	DB() *gorm.DB

	// Model 指定模型进行操作
	Model(value any) *gorm.DB

	// Table 指定表名进行操作
	Table(name string) *gorm.DB

	// WithContext 设置上下文
	WithContext(ctx context.Context) *gorm.DB

	// ========== 事务管理 ==========
	// Transaction 执行事务
	Transaction(fn func(*gorm.DB) error, opts ...*sql.TxOptions) error

	// Begin 开启事务
	Begin(opts ...*sql.TxOptions) *gorm.DB

	// ========== 迁移管理 ==========
	// AutoMigrate 自动迁移
	AutoMigrate(models ...any) error

	// Migrator 获取迁移器
	Migrator() gorm.Migrator

	// ========== 连接管理 ==========
	// Driver 获取数据库驱动类型
	Driver() string

	// Ping 检查数据库连接
	Ping(ctx context.Context) error

	// Stats 获取连接池统计信息
	Stats() sql.DBStats

	// Close 关闭数据库连接
	Close() error

	// ========== 原生 SQL ==========
	// Exec 执行原生 SQL
	Exec(sql string, values ...any) *gorm.DB

	// Raw 执行原生查询
	Raw(sql string, values ...any) *gorm.DB
}

IDatabaseManager 数据库管理器接口(完全基于 GORM)

func Build

func Build(
	driverType string,
	driverConfig map[string]any,
	loggerMgr loggermgr.ILoggerManager,
	telemetryMgr telemetrymgr.ITelemetryManager,
) (IDatabaseManager, error)

Build 创建数据库管理器实例 参数:

  • driverType: 驱动类型 ("mysql", "postgresql", "sqlite", "none")
  • driverConfig: 驱动配置 (根据驱动类型不同而不同)
  • mysql: 传递给 parseMySQLConfig 的 map[string]any
  • postgresql: 传递给 parsePostgreSQLConfig 的 map[string]any
  • sqlite: 传递给 parseSQLiteConfig 的 map[string]any
  • none: 忽略
  • loggerMgr: 日志管理器
  • telemetryMgr: 遥测管理器

返回 IDatabaseManager 接口实例和可能的错误

func BuildWithConfigProvider

func BuildWithConfigProvider(
	configProvider configmgr.IConfigManager,
	loggerMgr loggermgr.ILoggerManager,
	telemetryMgr telemetrymgr.ITelemetryManager,
) (IDatabaseManager, error)

BuildWithConfigProvider 从配置提供者创建数据库管理器实例 自动从配置提供者读取 database.driver 和对应驱动配置 参数:

  • configProvider: 配置提供者
  • loggerMgr: 日志管理器
  • telemetryMgr: 遥测管理器

配置路径:

  • database.driver: 驱动类型 ("mysql", "postgresql", "sqlite", "none")
  • database.mysql_config: MySQL 驱动配置(当 driver=mysql 时使用)
  • database.postgresql_config: PostgreSQL 驱动配置(当 driver=postgresql 时使用)
  • database.sqlite_config: SQLite 驱动配置(当 driver=sqlite 时使用)

返回 IDatabaseManager 接口实例和可能的错误

func NewDatabaseManagerMySQLImpl

func NewDatabaseManagerMySQLImpl(
	cfg *MySQLConfig,
	loggerMgr loggermgr.ILoggerManager,
	telemetryMgr telemetrymgr.ITelemetryManager,
) (IDatabaseManager, error)

NewDatabaseManagerMySQLImpl 创建 MySQL 数据库管理器 参数:

  • cfg: MySQL 配置
  • loggerMgr: 日志管理器
  • telemetryMgr: 遥测管理器

func NewDatabaseManagerNoneImpl

func NewDatabaseManagerNoneImpl(
	loggerMgr loggermgr.ILoggerManager,
	telemetryMgr telemetrymgr.ITelemetryManager,
) IDatabaseManager

NewDatabaseManagerNoneImpl 创建空数据库管理器

func NewDatabaseManagerPostgreSQLImpl

func NewDatabaseManagerPostgreSQLImpl(
	cfg *PostgreSQLConfig,
	loggerMgr loggermgr.ILoggerManager,
	telemetryMgr telemetrymgr.ITelemetryManager,
) (IDatabaseManager, error)

NewDatabaseManagerPostgreSQLImpl 创建 PostgreSQL 数据库管理器 参数:

  • cfg: PostgreSQL 配置
  • loggerMgr: 日志管理器
  • telemetryMgr: 遥测管理器

func NewDatabaseManagerSQLiteImpl

func NewDatabaseManagerSQLiteImpl(
	cfg *SQLiteConfig,
	loggerMgr loggermgr.ILoggerManager,
	telemetryMgr telemetrymgr.ITelemetryManager,
) (IDatabaseManager, error)

NewDatabaseManagerSQLiteImpl 创建 SQLite 数据库管理器 参数:

  • cfg: SQLite 配置
  • loggerMgr: 日志管理器
  • telemetryMgr: 遥测管理器

type MySQLConfig

type MySQLConfig struct {
	DSN string `yaml:"dsn"` // MySQL DSN,如: root:password@tcp(localhost:3306)/lite_demo?
	// charset=utf8mb4&parseTime=True&loc=Local
	PoolConfig *PoolConfig `yaml:"pool_config"` // 连接池配置(可选)
}

MySQLConfig MySQL 配置

func (*MySQLConfig) Validate

func (c *MySQLConfig) Validate() error

Validate 验证 MySQL 配置

type ObservabilityConfig

type ObservabilityConfig struct {
	// SlowQueryThreshold 慢查询阈值,0 表示不记录慢查询
	SlowQueryThreshold time.Duration `yaml:"slow_query_threshold"`

	// LogSQL 是否记录完整的 SQL 语句(生产环境建议关闭)
	LogSQL bool `yaml:"log_sql"`

	// SampleRate 采样率(0.0-1.0),1.0 表示全部记录
	SampleRate float64 `yaml:"sample_rate"`
}

ObservabilityConfig 可观测性配置

type PoolConfig

type PoolConfig struct {
	MaxOpenConns    int           `yaml:"max_open_conns"`     // 最大打开连接数,0 表示无限制
	MaxIdleConns    int           `yaml:"max_idle_conns"`     // 最大空闲连接数
	ConnMaxLifetime time.Duration `yaml:"conn_max_lifetime"`  // 连接最大存活时间
	ConnMaxIdleTime time.Duration `yaml:"conn_max_idle_time"` // 连接最大空闲时间
}

PoolConfig 数据库连接池配置(所有驱动通用)

func (*PoolConfig) Validate

func (c *PoolConfig) Validate() error

Validate 验证连接池配置

type PostgreSQLConfig

type PostgreSQLConfig struct {
	DSN string `yaml:"dsn"` // PostgreSQL DSN,如: host=localhost port=5432 user=postgres password=
	// password dbname=lite_demo sslmode=disable
	PoolConfig *PoolConfig `yaml:"pool_config"` // 连接池配置(可选)
}

PostgreSQLConfig PostgreSQL 配置

func (*PostgreSQLConfig) Validate

func (c *PostgreSQLConfig) Validate() error

Validate 验证 PostgreSQL 配置

type SQLiteConfig

type SQLiteConfig struct {
	DSN        string      `yaml:"dsn"`         // SQLite DSN,如: file:./data.db?cache=shared&mode=rwc
	PoolConfig *PoolConfig `yaml:"pool_config"` // 连接池配置(可选)
}

SQLiteConfig SQLite 配置

func (*SQLiteConfig) Validate

func (c *SQLiteConfig) Validate() error

Validate 验证 SQLite 配置

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL