优雅关闭 web 服务
- DBHelper, err = gorm.Open("mysql", "root:[email protected](115.159.59.129:3306)/test?charset=utf8&parseTime=True&loc=Local")
- if err != nil {
- log.Fatal("数据库初始化错误", err) //log.Fatal 输出日志并且退出主程序
- return
- }
优雅的关闭 server
part 1 初始化退出信号
- package src
- import (
- "context"
- "log"
- "os"
- "os/signal"
- "time"
- )
- var ServerSigChan chan os.Signal
- var ctx context.Context
- func init() {
- ServerSigChan = make(chan os.Signal)
- ctx, _ = context.WithTimeout(context.Background(), 10*time.Second)
- go ServerNotify(ctx)
- }
- func ServerNotify(ctx context.Context) {
- signal.Notify(ServerSigChan)
- select {
- case <-ServerSigChan:
- ServerSigChan <- os.Interrupt
- case <-ctx.Done(): // 这里等待的时间可以用来在关闭连接的时候释放资源
- ServerSigChan <- os.Interrupt
- }
- }
- func ShutDownServer(err error) {
- log.Println(err)
- ServerSigChan <- os.Interrupt
- log.Println("数据库优雅退出")
- os.Exit(1)
- }
part2 初始化数据库连接
- package src
- import (
- "github.com/jinzhu/gorm"
- "time"
- )
- var DBHelper *gorm.DB
- var err error
- func InitDB() {
- DBHelper, err = gorm.Open("mysql", "root:[email protected](115.159.59.129:3306)/test?charset=utf8&parseTime=True&loc=Local")
- if err != nil {
- ShutDownServer(err) // 关闭连接
- }
- DBHelper.SingularTable(true)
- DBHelper.DB().SetMaxIdleConns(10)
- DBHelper.DB().SetMaxOpenConns(100)
- DBHelper.DB().SetConnMaxLifetime(time.Hour)
- }
启动项目
- func main(){
- router := gin.Default()
- go InitDB() // 协程初始化数据库连接
- if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
- v.RegisterValidation("topicurl", TopicUrl)
- }
- v1 := router.Group("/v2/mtopics")
- {
- v2.DELETE("/mtopics", DelMTopic)
- }
- router.Run()
- }
来自为知笔记 (Wiz) https://www.wiz.cn/i/c5b11ee0
来源: http://www.bubuko.com/infodetail-3340539.html