优雅关闭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()
}

优雅关闭web服务的方式的更多相关文章

  1. WCF服务部署到IIS上,然后通过web服务引用方式出现错误的解决办法

    本文转载:http://www.cnblogs.com/shenba/archive/2012/01/06/2313932.html 昨天在用IIS部署一个WCF服务时,碰到了如下错误: 理解了文档内 ...

  2. 启动/关闭oracle服务有三种方式

    启动oracle服务有三种方式: 1 从控制面板 2 使用MS-DOS命令 3 通过Oracle Administration Assistant for WindowsNT -通过控制面板启动ora ...

  3. linux下启动和关闭tomcat服务的方式

    Linux下tomcat服务的启动.关闭与错误跟踪,通常通过以下几种方式启动关闭tomcat服务: 切换到tomcat主目录下的bin目录 启动tomcat服务 生产模式: 方式一:直接启动 ./st ...

  4. windows + myeclipse 调试 linux + tomcat 的java web服务 配置方式

    一.linux tomcat配置和启动 1.catalina.sh第一行加入 declare -x CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt ...

  5. linux系统关闭指定服务的方式

    1.根据名称称查找并关闭:pgrep -f 名称 | xargs kill -9 2.根据端口称查找并关闭:lsof -i:端口 | grep LISTEN|awk '{print $2}'|xarg ...

  6. 如何优雅关闭 Spring Boot 应用

    ## 前言 随着线上应用逐步采用 SpringBoot 构建,SpringBoot应用实例越来多,当线上某个应用需要升级部署时,常常简单粗暴地使用 kill 命令,这种停止应用的方式会让应用将所有处理 ...

  7. SpringBoot如何优雅关闭(SpringBoot2.3&Spring Boot2.2)

    SpringBoot如何优雅关闭(SpringBoot2.3&Spring Boot2.2) 优雅停止&暴力停止 暴力停止:像日常开发过程中,测试区或者本地开发时,我们并不会考虑项目关 ...

  8. 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务

    原文地址:http://www.ibm.com/developerworks/cn/web/wa-restful/ 简介: Spring,构建 Java™ 平台和 Enterprise Edition ...

  9. Webservices-1.web服务定义简介

    一.WEB服务定义(摘自维基百科)详情:http://zh.wikipedia.org/wiki/Web%E6%9C%8D%E5%8A%A1 Web服务是一种服务导向架构的技术,通过标准的Web协议提 ...

随机推荐

  1. 【Python爬虫案例学习】分析Ajax请求并抓取今日头条街拍图片

    1.抓取索引页内容 利用requests请求目标站点,得到索引网页HTML代码,返回结果. from urllib.parse import urlencode from requests.excep ...

  2. EasyExcel读取文件-同步处理数据

    读取代码 // 前端传过来的文件 MultipartFile file; InputStream inputStream = file.getInputStream(); // 读取excel数据,边 ...

  3. 唯一ID生成器--雪花算法

    在微服务架构,分布式系统中的操作会有一些全局性ID的需求,所以我们不能用数据库本身的自增功能来产生主键值,只能由程序来生成唯一的主键值.我们采用的是twitter的snokeflake(雪花)算法. ...

  4. 【Rust】使用cargo创建项目及cargo源的替换

    ---------------------------------参考文档------------------------------- https://rustlang-cn.org/office/ ...

  5. timeout超时时长优化和hystrix dashboard可视化分布式系统

    在生产环境中部署一个短路器,一开始需要将一些关键配置设置的大一些,比如timeout超时时长,线程池大小,或信号量容量 然后逐渐优化这些配置,直到在一个生产系统中运作良好 (1)一开始先不要设置tim ...

  6. C#月份和日期转大写和C#集合分组

    //日转化为大写 private static string DaytoUpper(int day, string type) { if (day < 20) { return MonthtoU ...

  7. ConcurrentDictionary,ConcurrentStack,ConcurrentQueue

    static void Main(string[] args) { var concurrentDictionary = new ConcurrentDictionary<int, string ...

  8. 连续子数组的最大乘积及连续子数组的最大和(Java)

    1. 子数组的最大和 输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.例如数组:arr[]={1, 2, 3, -2, ...

  9. 重要知识点angularjs $http.get 和 $http.post 传递参数(!!!格式不一样!!!!)

    $http.get请求数据的格式 $http.get(URL,{ params: { "id":id } }) .success(function(response, status ...

  10. loadrunner通过字符串左右边界提取字符串

    /****** *函数名称:strcut *函数说明:通过左边界.右边界,从字符串中截取子字符串 *注意事项:会申请新的内存,需要手动释放 ******/ void strcut(char *strS ...