package db import ( "context" "database/sql" _ "github.com/denisenkom/go-mssqldb" "github.com/go-xorm/xorm" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "leit.com/leit_seat_aps/glog" "log" "sync" "time" ) type DB_CONFIG struct { Server string `json:"server"` Userid string `json:"userid"` Password string `json:"password"` Database string `json:"database"` Port int `json:"port"` } //定义常量,工厂号 const G_FINR = 100 //mongoDb数据库名称 const DbName = "logDb" var ( G_DbEngine *xorm.Engine G_DbSalve *xorm.Engine G_SqlDbRawEngine *sql.DB mgoDb *mongo.Client mlock sync.Mutex ) // 获取MSSQL原生连接 func InitMssqlRawDb(connString string) (err error) { if G_SqlDbRawEngine, err = sql.Open("sqlserver", connString); err != nil { log.Printf("数据库引擎无法创建: %s, 错误原因: %v", connString, err) return } return } // 获取MSSQL的XORM连接 func InitMssqlDb(connString string) (err error) { if G_DbEngine, err = xorm.NewEngine("mssql", connString); err != nil { log.Println("数据库引擎无法创建: ", err.Error()) return } G_DbEngine.SetMaxIdleConns(100) G_DbEngine.SetMaxOpenConns(100) if err = G_DbEngine.Ping(); err != nil { log.Println("数据库连接失败:", connString, err.Error()) return } else { log.Println("数据库连接成功:", connString) } //开启debug //G_DbEngine.ShowSQL(true) return } // 获取MSSQL的XORM连接 func InitMssqlSalveDb(connString string) (err error) { if G_DbSalve, err = xorm.NewEngine("mssql", connString); err != nil { log.Println("数据库引擎无法创建: ", err.Error()) return } G_DbSalve.SetMaxIdleConns(100) G_DbSalve.SetMaxOpenConns(100) if err = G_DbSalve.Ping(); err != nil { log.Println("数据库连接失败:", connString, err.Error()) return } else { log.Println("数据库连接成功:", connString) } //开启debug //G_DbEngine.ShowSQL(true) return } //创建mongoDb数据库链接 func MgoDb() *mongo.Client { //判断mgoDb是否存在 if mgoDb != nil { return mgoDb } //创建之前会涉及并发,所以要加锁 mlock.Lock() defer mlock.Unlock() //细节,防止多个请求锁住 if mgoDb != nil { return mgoDb } //1.建立链接 ctx, _ := context.WithTimeout(context.Background(), 10*time.Second) client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017")) if err != nil { glog.Infoln("初始化数据库", "MgoDb return fail", err) return nil } else { mgoDb = client return mgoDb } }