Files
workspace/code/allapp/allapp-go-v3/internal/bootstrap/app.go
T
2026-04-02 22:07:21 +08:00

75 lines
1.1 KiB
Go

package bootstrap
import (
"allapp-go/internal/bootstrap/boots"
"allapp-go/internal/config"
"allapp-go/pkg/logger"
"os"
"os/signal"
"syscall"
"github.com/jackc/pgx/v5/pgxpool"
)
type App struct {
Config *config.Config
PgSql *pgxpool.Pool
}
// NewApp 初始化(不阻塞)
func NewApp() (*App, error) {
cfg, err := config.Load()
if err != nil {
return nil, err
}
// 日志
boots.InitLogger(cfg)
pgsql, err := boots.InitPgsql(cfg)
if err != nil {
return nil, err
}
// 其他组件
boots.InitUniqueId(cfg)
boots.InitJwt(cfg)
return &App{
Config: cfg,
PgSql: pgsql,
}, nil
}
// Run 启动服务(阻塞)
func (a *App) Run() error {
app, err := boots.RunServer(a.Config)
if err != nil {
return err
}
// 监听退出信号
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
logger.Log.Info("shutting down server...")
if err := app.Shutdown(); err != nil {
logger.Log.Error("shutdown failed")
return err
}
return nil
}
// Close 释放资源
func (a *App) Close() {
if a.PgSql != nil {
a.PgSql.Close()
}
logger.Sync()
}