golang mysql連接池


配置文件:

[spu]
user_name = xxx
password = xxx
host = 192.168.1.xxx
database = liexin_spu
table_prefix =xxx
type = mysql

#線上地址
#user:passwd@ip:port/databases
[supp]
user_name = xxx
password = xxx
host = xxx
database = xxx
table_prefix =lie_
type = mysql

[cms]
user_name = xxx
password = xxx
host = xxx
database = xxx
table_prefix =
type = mysql

 

配置多個mysql數據庫

package config

type BaseDatabase struct {
    UserName    string
    Password    string
    Host        string
    Database    string
    MaxIdleCons int
    MaxOpenCons int
    Prefix      string
}

//多數據庫配置
func BuildDatabaseList() (DatabaseList map[string]BaseDatabase) {
    return map[string]BaseDatabase{
        "spu": {
            UserName: Get("spu.user_name").String(),
            Password: Get("spu.password").String(),
            Host:     Get("spu.host").String(),
            Database: Get("spu.database").String(),
            Prefix:   Get("spu.table_prefix").String(),
        },
        "supp": {
            UserName: Get("supp.user_name").String(),
            Password: Get("supp.password").String(),
            Host:     Get("supp.host").String(),
            Database: Get("supp.database").String(),
            Prefix:   Get("supp.table_prefix").String(),
        },
        "cms": {
            UserName: Get("cms.user_name").String(),
            Password: Get("cms.password").String(),
            Host:     Get("cms.host").String(),
            Database: Get("cms.database").String(),
            Prefix:   Get("cms.table_prefix").String(),
        },
    }
}

 

實現mysql連接池

package mysql

import (
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "github.com/go-xorm/xorm"
    "search_server/pkg/config"
    "search_server/pkg/e"
)

var DatabaseConMap map[string]*xorm.Engine

func Setup() error {
    DatabaseConMap = make(map[string]*xorm.Engine, 0)
    DatabaseList := config.BuildDatabaseList()
    var err error
    //循環生成數據庫鏈接
    for conName, db := range DatabaseList {
        userName := db.UserName
        password := db.Password
        host := db.Host
        database := db.Database

        dataSourceName := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8", userName, password, host, database)

        DatabaseConMap[conName], err = xorm.NewEngine("mysql", dataSourceName)
        if err != nil {
            return e.NewFatalError(err.Error()) //這里返回致命異常
        }

        //日志打印SQL
        DatabaseConMap[conName].ShowSQL(true)

        //設置連接池的空閑數大小
        DatabaseConMap[conName].SetMaxIdleConns(db.MaxIdleCons)
        //設置最大打開連接數
        DatabaseConMap[conName].SetMaxOpenConns(db.MaxOpenCons)

    }

    return nil
}

func Conn(conName string) *xorm.Engine {
    return DatabaseConMap[conName]
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM