ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-07-22 18:09:37  阅读:921  来源: 互联网

标签:beego String AppConfig golang orm table 数据库


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
}

标签:beego,String,AppConfig,golang,orm,table,数据库
来源: https://blog.csdn.net/weixin_39998006/article/details/96879500

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有