package bootstraps import ( "os" "os/signal" "syscall" "time" "git.x2erp.com/qdy/go-base/logger" "git.x2erp.com/qdy/go-db/factory/database" ) // setupGracefulShutdown 设置优雅关闭 func setupGracefulShutdown(dbFactory *database.DBFactory, cleanupFuncs ...func()) { signalCh := make(chan os.Signal, 1) signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM) go func() { <-signalCh logger.Info("\n接收到关闭信号,正在优雅关闭...") // 关闭数据库连接 if dbFactory != nil { if err := dbFactory.Close(); err != nil { logger.Error("关闭数据库错误: %v", err) } logger.Info("数据库连接已关闭") } // 执行其他清理函数 for _, cleanup := range cleanupFuncs { cleanup() } // 等待日志写入完成 time.Sleep(100 * time.Millisecond) os.Exit(0) }() }