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()
  • 相关阅读:
    Win10 UWP Tile Generator
    Win10 BackgroundTask
    UWP Tiles
    UWP Ad
    Win10 build package error collections
    Win10 八步打通 Nuget 发布打包
    Win10 UI入门 pivot multiable DataTemplate
    Win10 UI入门 导航滑动条 求UWP工作
    UWP Control Toolkit Collections 求UWP工作
    Win10 UI入门 SliderRectangle
  • 原文地址:https://www.cnblogs.com/sunlong88/p/13389669.html
Copyright © 2011-2022 走看看