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

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)
signal.Notify(quit, os.Interrupt)
<-quit
app.Shutdown()
defer app.Shutdown()
}

View File

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

View File

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

View File

@ -23,7 +23,6 @@ func Init(conf []interface{}) {
for _, item := range conf {
dst := config.DataSourcesType[any]{}
_ = mapstructure.Decode(item, &dst)
logger.Log().Infof("%+v", dst)
fn, ok := SupportDataSources[dst.Type]
if !ok {
@ -51,3 +50,10 @@ func Open() (err error) {
}
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 {
mc := &conf.Config{}
_ = mapstructure.Decode(c.Config, &mc)
logger.Log().Infof("%+v,%+v,%+v", c.Enable, mc.Name(), mc.DataSources)
if dbEngine != nil {
_ = dbEngine.Close()
}
logger.Log().Debug("[mysql] 数据源初始化")
var err error
dbEngine, err = xorm.NewEngineGroup("mysql", mc.DataSources)
if err != nil {
@ -53,10 +53,12 @@ type db struct {
}
func (d *db) Close() error {
logger.Log().Debug("[mysql] 关闭数据库连接")
return d.db.Close()
}
func (d *db) Open() (err error) {
logger.Log().Debug("[mysql] 连接数据库")
// 自动创建数据库
for _, dsn := range d.config.DataSources {
dbName := ParseSqlConnDBName(dsn)
@ -69,8 +71,8 @@ func (d *db) Open() (err error) {
err = d.db.Ping()
if err != nil {
logger.Log().Fatal(err)
logger.Log().Fatalf("[mysql] 数据库连接失败, %s", err)
}
logger.Log().Debug("[mysql] 数据库连接成功")
return
}