75 lines
1.1 KiB
Go
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()
|
|
}
|