配置文件:
[mongo]
host = 192.168.1.xxx:27017
username = "xxxx"
password = "xxxx"
database = xxxx
maxPoolSize=100
自义定多个mongo数据库配置
package config
type MongoDbDatabase struct {
Host string
UserName string
Password string
Database string
MaxPoolSize string
}
func BuildMongoDbConfgs () map[string]MongoDbDatabase{
return map[string]MongoDbDatabase{
"default" : {
Host:Get("mongo.host").String(),
UserName:Get("mongo.username").String(),
Password:Get("mongo.password").String(),
Database:Get("mongo.database").String(),
MaxPoolSize:Get("mongo.maxPoolSize").String(),
},
}
}
连接池实现:
package mongo
import (
"fmt"
"gopkg.in/mgo.v2"
"search_server/pkg/config"
"strconv"
)
var session *mgo.Session
type ichuntMongo struct {
MongoList map[string]*mgo.Session
}
var ichuntMongo_ = &ichuntMongo{}
func getconn(mongoConfig config.MongoDbDatabase) (*mgo.Session ,error){
url := mongoConfig.Host
maxPoolSize := mongoConfig.MaxPoolSize
maxPoolSizeInt,err := strconv.Atoi(maxPoolSize)
if err != nil{
maxPoolSizeInt = 100
}
url += "?maxPoolSize="+maxPoolSize
session, err = mgo.Dial(url)
if err != nil {
return nil ,err
}
fmt.Println("url",url)
fmt.Println("maxPoolSizeInt",maxPoolSizeInt)
session.SetPoolLimit(maxPoolSizeInt)
session.SetMode(mgo.Monotonic, true)
myDB :=session.DB(mongoConfig.Database)
err = myDB.Login(mongoConfig.UserName,mongoConfig.Password)
if err != nil {
return nil ,err
}
return session,nil
}
func SetUp() (err error) {
err = nil
ichuntMongo_.MongoList = make(map[string]*mgo.Session,0)
mongodbList := config.BuildMongoDbConfgs()
if len(mongodbList) > 0{
for mongoName,mongoConfig := range mongodbList{
ichuntMongo_.MongoList[mongoName],err = getconn(mongoConfig)
if err != nil{
break
}
}
}
return err
}
func Conn(connection string) (*mgo.Session){
return ichuntMongo_.MongoList[connection].Copy()
}
调用方式:
mongodb = mongo.Conn("default");
defer mongodb.Close()
本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/p/13389669.html