package main
|
|
import (
|
"context"
|
"net/http"
|
"os"
|
"os/signal"
|
"silkserver/conf"
|
"silkserver/models"
|
"silkserver/pkg/logx"
|
"silkserver/router"
|
"silkserver/task"
|
"syscall"
|
"time"
|
)
|
|
func main() {
|
// 读取配置
|
if err := conf.Init(); err != nil {
|
logx.Errorf("config init error! ", err.Error())
|
return
|
}
|
|
// 日志初始化
|
logx.Init(*conf.LogConf)
|
defer logx.Sync()
|
|
// 数据库初始化
|
if err := models.Init(); err != nil {
|
logx.Errorf("db init error! ", err.Error())
|
return
|
}
|
logx.Infof("server start serve...")
|
server := &http.Server{
|
Addr: ":" + conf.WebConf.Port,
|
Handler: router.NewRouter(),
|
ReadTimeout: 5 * time.Second,
|
WriteTimeout: 5 * time.Second,
|
}
|
logx.Infof("server start success! \n\n\t- Local: \thttp://localhost:%v/\n\t- Network: \thttp://%v:%v/\n",
|
conf.WebConf.Port, conf.WebConf.Host, conf.WebConf.Port)
|
|
//定时任务初始化
|
task.Init()
|
|
go shutdown(server)
|
logx.Error(server.ListenAndServe().Error())
|
}
|
|
func shutdown(server *http.Server) {
|
quit := make(chan os.Signal, 1)
|
signal.Notify(quit, syscall.SIGKILL, syscall.SIGQUIT, syscall.SIGINT, syscall.SIGTERM)
|
<-quit
|
// 创建一个上下文,设置超时时间
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
defer cancel()
|
logx.Infof("server exiting...")
|
if err := server.Shutdown(ctx); err != nil {
|
logx.Warnf("服务优雅退出失败: %v", err)
|
return
|
}
|
logx.Infof("server exited success")
|
}
|