-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
69 lines (61 loc) · 1.66 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package main
import (
"context"
"fmt"
"net/http"
"os"
"os/signal"
"syscall"
"time"
"go.uber.org/zap"
"github.com/xjian2021/bluebell/dao/mysql"
"github.com/xjian2021/bluebell/dao/redis"
"github.com/xjian2021/bluebell/logger"
"github.com/xjian2021/bluebell/pkg/snowflake"
validatorPkg "github.com/xjian2021/bluebell/pkg/validator-trans"
"github.com/xjian2021/bluebell/routes"
"github.com/xjian2021/bluebell/settings"
)
func main() {
// 加载配置
settings.Init()
// 初始化日志
logger.Init(settings.C.Log)
defer zap.L().Sync()
// 初始化mysql
mysql.Init(settings.C.Mysql)
defer mysql.Close()
// 初始化redis
redis.Init(settings.C.Redis)
defer redis.Close()
// 初始化分布式id
if err := snowflake.Init(settings.C.StartTime, int64(settings.C.MachineId)); err != nil {
zap.L().Fatal("snowflake.Init", zap.Error(err))
}
// 初始化validator全局翻译器
if err := validatorPkg.InitTrans(settings.C.Locale); err != nil {
zap.L().Fatal("validator-trans.InitTrans", zap.Error(err))
}
// 注册路由
r := routes.Setup()
svr := &http.Server{
Addr: fmt.Sprintf(":%d", settings.C.Port),
Handler: r,
}
go func() {
if err := svr.ListenAndServe(); err != nil {
zap.L().Info("svr.ListenAndServe", zap.Error(err))
}
}()
//zap.L().Info("hello world!")
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
s := <-quit
zap.L().Debug("close server...", zap.String("signal", s.String()))
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := svr.Shutdown(ctx); err != nil {
zap.L().Fatal("svr.Shutdown", zap.Error(err))
}
zap.L().Info("server exit!")
}