golang beego框架orm使用连接池记录

beego的orm默认是设置不了超时时间的

package models

import (
	"errors"
	"fmt"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
	"net/url"
	"os"
	"reflect"
	"strings"
	//"database/sql"
	_ "github.com/go-sql-driver/mysql"
)

func init() {
	//如果存在app.conf文件,则表示程序已安装,执行数据库初始化
	Init()
}
//初始化数据库注册
func Init() {
	//初始化数据库
	RegisterDB()
	runmode := beego.AppConfig.String("runmode")
	if runmode == "prod" {
		orm.Debug = false
		orm.RunSyncdb("default", false, false)
	} else {
		orm.Debug = true
		orm.RunSyncdb("default", false, true)
	}
}

//注册数据库
func RegisterDB() {
	orm.RegisterDriver("mysql", orm.DRMySQL)
	models := []interface{}{//如果使用高级查询必须注册模型
		NewUser(),
		NewUserInfo(),
	}
	orm.RegisterModelWithPrefix(beego.AppConfig.DefaultString("prefix", "bee_"), models...)
	dbUser := beego.AppConfig.String("user")
	dbPassword := beego.AppConfig.String("password")
	if envpass := os.Getenv("MYSQL_PASSWORD"); envpass != "" { //获取环境变量中的数据库密码
		dbPassword = envpass
	}
	dbDatabase := beego.AppConfig.String("database")
	if envdatabase := os.Getenv("MYSQL_DATABASE"); envdatabase != "" {//获取环境变量中的数据库库名
		dbDatabase = envdatabase
	}
	dbCharset := beego.AppConfig.String("charset")
	dbHost := beego.AppConfig.String("host")
	if envhost := os.Getenv("MYSQL_HOST"); envhost != "" { //获取环境变量中的数据库链接地址
		dbHost = envhost
	}
	dbPort := beego.AppConfig.String("port")
	if envport := os.Getenv("MYSQL_PORT"); envport != "" { //获取环境变量中的数据库链接端口
		dbPort = envport
	}
	loc := "Local"
	if timezone := beego.AppConfig.String("timezone"); timezone != "" { 
		loc = url.QueryEscape(timezone)
	}
	dbLink := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&loc=%v", dbUser, dbPassword, dbHost, dbPort, dbDatabase, dbCharset, loc)
	maxIdle := beego.AppConfig.DefaultInt("maxIdle", 50) //连接池空闲
	maxConn := beego.AppConfig.DefaultInt("maxConn", 300) //连接池最大连接数  数据库默认链接数一般为512
	if err := orm.RegisterDataBase("default", "mysql", dbLink, maxIdle, maxConn); err != nil {
		panic(err)
	}
	db,_ := orm.GetDB("default")//获取数据库
	//设置连接池超时时间 mysql默认超时时间为28800秒也就是八个小时 
	db.SetConnMaxLifetime(14400)
}

//获取带表前缀的数据表
//@param            table               数据表
func getTable(table string) string {
	prefix := beego.AppConfig.DefaultString("prefix", "bee_")
	if !strings.HasPrefix(table, prefix) {
		table = prefix + table
	}
	return table
}
上一篇:day42-jQuery(一)


下一篇:JQuery