zoukankan      html  css  js  c++  java
  • 优雅关闭web服务的方式

    优雅关闭web服务

    DBHelper, err = gorm.Open("mysql", "root:root@(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:root@(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()
    }




  • 相关阅读:
    单例模式
    面向对象编程(一)
    杨辉三角形
    静态方法,Arrays类,二维数组
    数组,查找算法,二分查找法,冒泡排序,选择排序,插入排序
    万年历(二)
    循环结构
    万年历(一)
    条件结构
    类型转换,位运算符
  • 原文地址:https://www.cnblogs.com/hualou/p/12071042.html
Copyright © 2011-2022 走看看