zoukankan      html  css  js  c++  java
  • golang mongodb连接池使用姿势

    配置文件:

    [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()
  • 相关阅读:
    xgboost系列之应用xgboost的注意事项
    【pandas】pandas.DataFrame.rename()---重置索引名称
    【剑指offer】复杂链表的复制
    【剑指offer】二叉树中和为某一值的路径,C++实现
    设计模式21 访问者模式
    设计模式20 迭代器模式
    设计模式19 中介者模式
    设计模式18 观察者模式
    设计模式17 状态模式
    设计模式16 责任链模式
  • 原文地址:https://www.cnblogs.com/sunlong88/p/13389669.html
Copyright © 2011-2022 走看看