【gorm】常见问题解决方案

1、在使用gorm访问数据后,隔一段时间请求接口,则输出 invalid connection ?

这是因为数据model连接数据库后,并没有在访问后立即执行close();而mysql中有相关配置,当超时后,主动关闭服务,导致下次访问mysql出现以上错误。

SHOW VARIABLES LIKE '%timeout%';

 

wait_timeout = 120,表示2分钟内没有访问,则断开连接,此时可以设置给数据连接设置一个比120小的值,即时间到了后,将重新与数据库建立连接,而不是直接访问。

package models

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/go-sql-driver/mysql"
	"log"
	"time"
)

var db *gorm.DB

const PAGESIZE int = 10

type Model struct {
	Id 			uint		`gorm:"comment:'主键ID';primary_key" form:"id" json:"id" `
	CreatedAt   LocalTime 	`gorm:"comment:'创建时间';type:datetime;" form:"created_at" json:"created_at"`
	UpdatedAt	LocalTime 	`gorm:"comment:'更新时间';type:datetime;" form:"updated_at" json:"updated_at"`
}

func init() {
	var err error
	db, err = gorm.Open("mysql",fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
		"root",
		"root",
		"127.0.0.1:3306",
		"student",
	))

    //设定数据库连接的最大生命周期
	db.DB().SetConnMaxLifetime(60 * time.Second)

	if err != nil {
		log.Println("数据库连接失败!")
	} else {
		log.Println("数据库连接成功!")
	}
	log.Println("%v", db)
}

func Close() {
	log.Println("Close DB")
	defer db.Close()
}

func GetDB() *gorm.DB {
	return db;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值