65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
package lxrun
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"gitea.listensoft.net/tool/lxutils/lxDb"
|
|
"gitea.listensoft.net/tool/lxutils/lxLock"
|
|
"gitea.listensoft.net/tool/lxutils/lxlog"
|
|
"gitea.listensoft.net/tool/lxutils/lxzap"
|
|
"github.com/gin-gonic/gin"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
"time"
|
|
)
|
|
|
|
func Run(env string, port string, fun func(), r func(router *gin.Engine), zapConfig lxzap.ZapLogConfig, dbConf []lxDb.DbConfig, redisConf lxDb.RedisConfig) {
|
|
_ = lxlog.InitLog()
|
|
err := lxzap.InitZapLogger(zapConfig, env)
|
|
if err != nil {
|
|
panic(err.Error())
|
|
}
|
|
app := gin.New()
|
|
// 注册zap相关中间件
|
|
if env == "dev" {
|
|
app.Use(gin.Logger(), gin.Recovery())
|
|
} else {
|
|
app.Use(lxzap.GinLogger(), lxzap.GinRecovery(true))
|
|
}
|
|
lxDb.InitDBS(env, dbConf)
|
|
lxDb.InitRedis(redisConf)
|
|
lxLock.InitRedis(redisConf)
|
|
fun()
|
|
r(app)
|
|
srv := http.Server{
|
|
Addr: ":" + port,
|
|
Handler: app,
|
|
}
|
|
// make sure idle connections returned
|
|
processed := make(chan struct{})
|
|
go func() {
|
|
c := make(chan os.Signal, 1)
|
|
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
|
|
<-c
|
|
fmt.Println("ctrl + c")
|
|
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
|
|
defer cancel()
|
|
if err := srv.Shutdown(ctx); nil != err {
|
|
log.Fatalf("server shutdown failed, err: %v\n", err)
|
|
}
|
|
log.Println("server gracefully shutdown")
|
|
|
|
processed <- struct{}{}
|
|
}()
|
|
// serve
|
|
err = srv.ListenAndServe()
|
|
if http.ErrServerClosed != err {
|
|
log.Fatalf("server not gracefully shutdown, err :%v\n", err)
|
|
}
|
|
// waiting for goroutine above processed
|
|
<-processed
|
|
}
|