|
|
- 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
- }
- }
|