跳转到主要内容

数据库插件

Lynx 当前并没有一个统一的 lynx.db 抽象插件。真实的数据库接入入口是具体 SQL 插件:MySQL、PostgreSQL、MSSQL,它们都建立在 lynx-sql-sdk 之上。

Runtime 事实

数据库Go module配置前缀Runtime 插件名常见公开 API
MySQLgithub.com/go-lynx/lynx-mysqllynx.mysqlmysql.clientGetDB()GetProvider()GetDriver()
PostgreSQLgithub.com/go-lynx/lynx-pgsqllynx.pgsqlpgsql.clientGetDB()GetProvider()GetDriver()
MSSQLgithub.com/go-lynx/lynx-mssqllynx.mssqlmssql.clientGetDB()GetProvider()

共享 SQL 行为

这些具体插件都会继承 SQL SDK 的运行时能力:

  • 启动期连接与校验
  • 连接重试
  • 连接池监控
  • 健康检查
  • 自动重连
  • 连接预热
  • 慢查询监控
  • 泄漏检测

所以理解 SQL 栈时,正确视角应该是“具体数据库插件 + 共享 SQL runtime 层”,而不是“一个抽象 db 插件”。

MySQL 配置示例

lynx:
mysql:
driver: mysql
source: "root:123@tcp(127.0.0.1:3306)/demo?parseTime=True"
min_conn: 10
max_conn: 50
max_idle_time: 30s

官方模板实际怎么配

官方模板当前是直接选 MySQL,而不是写一个假的通用 db 配置块:

lynx:
mysql:
driver: mysql
source: "lynx:lynx123456@tcp(127.0.0.1:3306)/lynx_test?charset=utf8mb4&parseTime=True&loc=Local"
min_conn: 10
max_conn: 10

这很关键,因为很多旧文档会让人误以为存在一个抽象数据库插件。真实项目模板已经明确说明不是这样:先选具体 SQL 插件,比如 lynx.mysql,然后消费它暴露的 provider 和 runtime 持有连接池。

PostgreSQL 配置示例

lynx:
pgsql:
driver: postgres
source: "postgres://postgres:123@127.0.0.1:5432/demo?sslmode=disable"
min_conn: 10
max_conn: 50

如何使用

import mysql "github.com/go-lynx/lynx-mysql"

db, err := mysql.GetDB()
provider := mysql.GetProvider()
driver, err := mysql.GetDriver()

当启用了 auto-reconnect 时,长生命周期组件应优先使用 provider 形式,而不是缓存旧的 *sql.DB 或 driver。

lynx-layout/internal/data/data.go 里也是这样做的。它调用 lynx-mysql.GetProvider(),再从这个稳定 provider 推导 Ent driver,而不是永久缓存一次性的 DB 句柄。

相关页面