123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- package main
- import (
- "context"
- "fmt"
- "net/http"
- "time"
- "github.com/xinliangnote/go-gin-api/configs"
- "github.com/xinliangnote/go-gin-api/internal/router"
- "github.com/xinliangnote/go-gin-api/pkg/env"
- "github.com/xinliangnote/go-gin-api/pkg/logger"
- "github.com/xinliangnote/go-gin-api/pkg/shutdown"
- "github.com/xinliangnote/go-gin-api/pkg/timeutil"
- "go.uber.org/zap"
- )
- // @title swagger 接口文档
- // @version 2.0
- // @description
- // @contact.name
- // @contact.url
- // @contact.email
- // @license.name MIT
- // @license.url https://github.com/xinliangnote/go-gin-api/blob/master/LICENSE
- // @securityDefinitions.apikey LoginToken
- // @in header
- // @name token
- // @BasePath /
- func main() {
- // 初始化 access logger
- accessLogger, err := logger.NewJSONLogger(
- logger.WithDisableConsole(),
- logger.WithField("domain", fmt.Sprintf("%s[%s]", configs.ProjectName, env.Active().Value())),
- logger.WithTimeLayout(timeutil.CSTLayout),
- logger.WithFileP(configs.ProjectAccessLogFile),
- )
- if err != nil {
- panic(err)
- }
- // 初始化 cron logger
- cronLogger, err := logger.NewJSONLogger(
- logger.WithDisableConsole(),
- logger.WithField("domain", fmt.Sprintf("%s[%s]", configs.ProjectName, env.Active().Value())),
- logger.WithTimeLayout(timeutil.CSTLayout),
- logger.WithFileP(configs.ProjectCronLogFile),
- )
- if err != nil {
- panic(err)
- }
- defer func() {
- _ = accessLogger.Sync()
- _ = cronLogger.Sync()
- }()
- // 初始化 HTTP 服务
- s, err := router.NewHTTPServer(accessLogger, cronLogger)
- if err != nil {
- panic(err)
- }
- server := &http.Server{
- Addr: configs.ProjectPort,
- Handler: s.Mux,
- }
- go func() {
- if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
- accessLogger.Fatal("http server startup err", zap.Error(err))
- }
- }()
- // 优雅关闭
- shutdown.NewHook().Close(
- // 关闭 http server
- func() {
- ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
- defer cancel()
- if err := server.Shutdown(ctx); err != nil {
- accessLogger.Error("server shutdown err", zap.Error(err))
- }
- },
- // 关闭 db
- func() {
- if s.Db != nil {
- if err := s.Db.DbWClose(); err != nil {
- accessLogger.Error("dbw close err", zap.Error(err))
- }
- if err := s.Db.DbRClose(); err != nil {
- accessLogger.Error("dbr close err", zap.Error(err))
- }
- }
- },
- // 关闭 cache
- func() {
- if s.Cache != nil {
- if err := s.Cache.Close(); err != nil {
- accessLogger.Error("cache close err", zap.Error(err))
- }
- }
- },
- // 关闭 cron Server
- func() {
- if s.CronServer != nil {
- s.CronServer.Stop()
- }
- },
- )
- }
|