沈阳玫苑物业管理后端
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.

108 lines
2.3 KiB

4 years ago
4 years ago
  1. package db
  2. import (
  3. "context"
  4. "fmt"
  5. _ "github.com/go-sql-driver/mysql"
  6. "github.com/go-xorm/xorm"
  7. "go.mongodb.org/mongo-driver/mongo"
  8. "go.mongodb.org/mongo-driver/mongo/options"
  9. "lapp_-wy/conf"
  10. "lapp_-wy/utils"
  11. "lapp_-wy/web/middleware/glog"
  12. "log"
  13. "path/filepath"
  14. "sync"
  15. "time"
  16. )
  17. var (
  18. masterEngine *xorm.Engine
  19. Lock sync.Mutex
  20. mgoDb *mongo.Client
  21. mlock sync.Mutex
  22. )
  23. //链接到数据库
  24. func MasterEngine() *xorm.Engine {
  25. //判断masterEngine是否存在
  26. if masterEngine != nil {
  27. return masterEngine
  28. }
  29. //创建之前会涉及并发,所以要加锁
  30. Lock.Lock()
  31. defer Lock.Unlock()
  32. //细节,防止多个请求锁住
  33. if masterEngine != nil {
  34. return masterEngine
  35. }
  36. c := conf.MasterDbConfig
  37. driveSource := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8",
  38. c.User, c.Pwd, c.Host, c.Port, c.DbName)
  39. engine, err := xorm.NewEngine(conf.DriverName, driveSource)
  40. //开启sql,debug
  41. //engine.ShowSQL(true)
  42. if err != nil {
  43. log.Fatal("dbhelper.DbinstanceMaster error= ", err)
  44. return nil
  45. } else {
  46. masterEngine = engine
  47. return masterEngine
  48. }
  49. return masterEngine
  50. }
  51. //创建mongoDb数据库链接
  52. func MgoDb() *mongo.Client {
  53. //判断mgoDb是否存在
  54. if mgoDb != nil {
  55. return mgoDb
  56. }
  57. //创建之前会涉及并发,所以要加锁
  58. mlock.Lock()
  59. defer mlock.Unlock()
  60. //细节,防止多个请求锁住
  61. if mgoDb != nil {
  62. return mgoDb
  63. }
  64. //1.建立链接
  65. ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
  66. client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))
  67. if err != nil {
  68. log.Fatal("dbhelper.MgoDb error= ", err)
  69. return nil
  70. } else {
  71. mgoDb = client
  72. return mgoDb
  73. }
  74. }
  75. //数据备份
  76. func BackUp() {
  77. var (
  78. engine *xorm.Engine
  79. err error
  80. )
  81. c := conf.MasterDbConfig
  82. driveSource := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8",
  83. c.User, c.Pwd, c.Host, c.Port, c.DbName)
  84. if engine, err = xorm.NewEngine(conf.DriverName, driveSource); err != nil {
  85. return
  86. }
  87. if err = engine.Ping(); err != nil {
  88. glog.ErrorExtln("数据库连接失败:", "err:", err.Error())
  89. return
  90. } else {
  91. glog.ErrorExtln("数据库连接成功:", "driveSource", driveSource)
  92. }
  93. filename := utils.TimeFormat(time.Now(),"yyyy-MM-dd") + ".sql"
  94. dirpath := filepath.Join(c.BackUp,filename)
  95. err = engine.DumpAllToFile(dirpath, conf.DriverName)
  96. if err != nil {
  97. return
  98. }
  99. }