refactor: 优化数据库初始化逻辑,使用 sync.Once 确保 GormDB 只初始化一次,避免db查空
This commit is contained in:
parent
e84d64100c
commit
c50ca47911
1
main.go
1
main.go
@ -55,7 +55,6 @@ func main() {
|
|||||||
}()
|
}()
|
||||||
defer exec.DockerContainer.RemoveContainer()
|
defer exec.DockerContainer.RemoveContainer()
|
||||||
defer sqlite3.CloseDB()
|
defer sqlite3.CloseDB()
|
||||||
sqlite3.InitGormDB()
|
|
||||||
go func() {
|
go func() {
|
||||||
const reconnectDelay = 5 * time.Second
|
const reconnectDelay = 5 * time.Second
|
||||||
for !stopRun {
|
for !stopRun {
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
package sqlite3
|
package sqlite3
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"sync"
|
||||||
|
|
||||||
"gorm.io/driver/sqlite"
|
"gorm.io/driver/sqlite"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
var db *gorm.DB
|
var db *gorm.DB
|
||||||
|
|
||||||
|
var OnceInitGormDB sync.Once
|
||||||
|
|
||||||
func InitGormDB() {
|
func InitGormDB() {
|
||||||
var err error
|
var err error
|
||||||
db, err = gorm.Open(sqlite.Open("data.db"), &gorm.Config{})
|
db, err = gorm.Open(sqlite.Open("data.db"), &gorm.Config{})
|
||||||
@ -16,27 +20,30 @@ func InitGormDB() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetGormDB() *gorm.DB {
|
func GetGormDB() *gorm.DB {
|
||||||
|
if db == nil {
|
||||||
|
OnceInitGormDB.Do(InitGormDB)
|
||||||
|
}
|
||||||
return db
|
return db
|
||||||
}
|
}
|
||||||
|
|
||||||
// TryCreateTable 使用GORM执行原始SQL创建表语句
|
// TryCreateTable 使用GORM执行原始SQL创建表语句
|
||||||
func TryCreateTable(query string) error {
|
func TryCreateTable(query string) error {
|
||||||
return db.Exec(query).Error
|
return GetGormDB().Exec(query).Error
|
||||||
}
|
}
|
||||||
|
|
||||||
// AutoMigrate 使用GORM的自动迁移功能
|
// AutoMigrate 使用GORM的自动迁移功能
|
||||||
func AutoMigrate(models ...interface{}) error {
|
func AutoMigrate(models ...interface{}) error {
|
||||||
return db.AutoMigrate(models...)
|
return GetGormDB().AutoMigrate(models...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetGormTx 获取GORM事务
|
// GetGormTx 获取GORM事务
|
||||||
func GetGormTx() *gorm.DB {
|
func GetGormTx() *gorm.DB {
|
||||||
return db.Begin()
|
return GetGormDB().Begin()
|
||||||
}
|
}
|
||||||
|
|
||||||
// CloseDB 关闭数据库连接
|
// CloseDB 关闭数据库连接
|
||||||
func CloseDB() {
|
func CloseDB() {
|
||||||
if sqlDB, err := db.DB(); err == nil {
|
if sqlDB, err := GetGormDB().DB(); err == nil {
|
||||||
sqlDB.Close()
|
sqlDB.Close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user