SJA APS后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
2.6 KiB

  1. package db
  2. import (
  3. "context"
  4. "database/sql"
  5. _ "github.com/denisenkom/go-mssqldb"
  6. "github.com/go-xorm/xorm"
  7. "go.mongodb.org/mongo-driver/mongo"
  8. "go.mongodb.org/mongo-driver/mongo/options"
  9. "leit.com/leit_seat_aps/glog"
  10. "log"
  11. "sync"
  12. "time"
  13. )
  14. type DB_CONFIG struct {
  15. Server string `json:"server"`
  16. Userid string `json:"userid"`
  17. Password string `json:"password"`
  18. Database string `json:"database"`
  19. Port int `json:"port"`
  20. }
  21. //定义常量,工厂号
  22. const G_FINR = 100
  23. //mongoDb数据库名称
  24. const DbName = "logDb"
  25. var (
  26. G_DbEngine *xorm.Engine
  27. G_DbSalve *xorm.Engine
  28. G_SqlDbRawEngine *sql.DB
  29. mgoDb *mongo.Client
  30. mlock sync.Mutex
  31. )
  32. // 获取MSSQL原生连接
  33. func InitMssqlRawDb(connString string) (err error) {
  34. if G_SqlDbRawEngine, err = sql.Open("sqlserver", connString); err != nil {
  35. log.Printf("数据库引擎无法创建: %s, 错误原因: %v", connString, err)
  36. return
  37. }
  38. return
  39. }
  40. // 获取MSSQL的XORM连接
  41. func InitMssqlDb(connString string) (err error) {
  42. if G_DbEngine, err = xorm.NewEngine("mssql", connString); err != nil {
  43. log.Println("数据库引擎无法创建: ", err.Error())
  44. return
  45. }
  46. G_DbEngine.SetMaxIdleConns(100)
  47. G_DbEngine.SetMaxOpenConns(100)
  48. if err = G_DbEngine.Ping(); err != nil {
  49. log.Println("数据库连接失败:", connString, err.Error())
  50. return
  51. } else {
  52. log.Println("数据库连接成功:", connString)
  53. }
  54. //开启debug
  55. //G_DbEngine.ShowSQL(true)
  56. return
  57. }
  58. // 获取MSSQL的XORM连接
  59. func InitMssqlSalveDb(connString string) (err error) {
  60. if G_DbSalve, err = xorm.NewEngine("mssql", connString); err != nil {
  61. log.Println("数据库引擎无法创建: ", err.Error())
  62. return
  63. }
  64. G_DbSalve.SetMaxIdleConns(100)
  65. G_DbSalve.SetMaxOpenConns(100)
  66. if err = G_DbSalve.Ping(); err != nil {
  67. log.Println("数据库连接失败:", connString, err.Error())
  68. return
  69. } else {
  70. log.Println("数据库连接成功:", connString)
  71. }
  72. //开启debug
  73. //G_DbEngine.ShowSQL(true)
  74. return
  75. }
  76. //创建mongoDb数据库链接
  77. func MgoDb() *mongo.Client {
  78. //判断mgoDb是否存在
  79. if mgoDb != nil {
  80. return mgoDb
  81. }
  82. //创建之前会涉及并发,所以要加锁
  83. mlock.Lock()
  84. defer mlock.Unlock()
  85. //细节,防止多个请求锁住
  86. if mgoDb != nil {
  87. return mgoDb
  88. }
  89. //1.建立链接
  90. ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
  91. client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))
  92. if err != nil {
  93. glog.Infoln("初始化数据库", "MgoDb return fail", err)
  94. return nil
  95. } else {
  96. mgoDb = client
  97. return mgoDb
  98. }
  99. }