退出时关闭所有数据源连接

This commit is contained in:
Shikong 2023-02-26 21:34:53 +08:00
parent 9be07ca18b
commit 3643fb25eb
5 changed files with 20 additions and 7 deletions

View File

@ -40,5 +40,6 @@ func Main() {
quit := make(chan os.Signal, 1) quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt) signal.Notify(quit, os.Interrupt)
<-quit <-quit
app.Shutdown()
defer app.Shutdown()
} }

View File

@ -64,7 +64,11 @@ func Shutdown() {
return return
} }
logger.Log().Infof("关闭服务") fib.Exec(func() {
database.Close()
})
logger.Log().Info("关闭服务")
timeout := 5 * time.Second timeout := 5 * time.Second
err := app.ShutdownWithTimeout(timeout) err := app.ShutdownWithTimeout(timeout)
if err != nil { if err != nil {

View File

@ -2,7 +2,7 @@ package main
import ( import (
"matrix-middle-service/cmd/service" "matrix-middle-service/cmd/service"
_ "matrix-middle-service/pkg/database/mysql" _ "matrix-middle-service/pkg/database/driver/mysql"
_ "matrix-middle-service/pkg/logger" _ "matrix-middle-service/pkg/logger"
) )

View File

@ -23,7 +23,6 @@ func Init(conf []interface{}) {
for _, item := range conf { for _, item := range conf {
dst := config.DataSourcesType[any]{} dst := config.DataSourcesType[any]{}
_ = mapstructure.Decode(item, &dst) _ = mapstructure.Decode(item, &dst)
logger.Log().Infof("%+v", dst)
fn, ok := SupportDataSources[dst.Type] fn, ok := SupportDataSources[dst.Type]
if !ok { if !ok {
@ -51,3 +50,10 @@ func Open() (err error) {
} }
return return
} }
func Close() {
for _, driver := range drivers {
_ = driver.Close()
}
return
}

View File

@ -26,12 +26,12 @@ func init() {
database.Register("mysql", func(c config.DataSourcesType[any]) database.DataBase { database.Register("mysql", func(c config.DataSourcesType[any]) database.DataBase {
mc := &conf.Config{} mc := &conf.Config{}
_ = mapstructure.Decode(c.Config, &mc) _ = mapstructure.Decode(c.Config, &mc)
logger.Log().Infof("%+v,%+v,%+v", c.Enable, mc.Name(), mc.DataSources)
if dbEngine != nil { if dbEngine != nil {
_ = dbEngine.Close() _ = dbEngine.Close()
} }
logger.Log().Debug("[mysql] 数据源初始化")
var err error var err error
dbEngine, err = xorm.NewEngineGroup("mysql", mc.DataSources) dbEngine, err = xorm.NewEngineGroup("mysql", mc.DataSources)
if err != nil { if err != nil {
@ -53,10 +53,12 @@ type db struct {
} }
func (d *db) Close() error { func (d *db) Close() error {
logger.Log().Debug("[mysql] 关闭数据库连接")
return d.db.Close() return d.db.Close()
} }
func (d *db) Open() (err error) { func (d *db) Open() (err error) {
logger.Log().Debug("[mysql] 连接数据库")
// 自动创建数据库 // 自动创建数据库
for _, dsn := range d.config.DataSources { for _, dsn := range d.config.DataSources {
dbName := ParseSqlConnDBName(dsn) dbName := ParseSqlConnDBName(dsn)
@ -69,8 +71,8 @@ func (d *db) Open() (err error) {
err = d.db.Ping() err = d.db.Ping()
if err != nil { if err != nil {
logger.Log().Fatal(err) logger.Log().Fatalf("[mysql] 数据库连接失败, %s", err)
} }
logger.Log().Debug("[mysql] 数据库连接成功")
return return
} }