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;
}