dbhelper.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package datasource
  2. import (
  3. "fmt"
  4. _ "github.com/go-sql-driver/mysql"
  5. "log"
  6. "sync"
  7. "xorm.io/xorm"
  8. "xorm.io/xorm/caches"
  9. log2 "xorm.io/xorm/log"
  10. "xps/conf"
  11. )
  12. var (
  13. masterEngine *xorm.Engine
  14. slaveEngine *xorm.Engine
  15. iddbEngine *xorm.Engine
  16. lock sync.Mutex
  17. )
  18. func InstanceMaster() *xorm.Engine {
  19. if masterEngine != nil {
  20. return masterEngine
  21. }
  22. lock.Lock()
  23. defer lock.Unlock()
  24. if masterEngine != nil {
  25. return masterEngine
  26. }
  27. c := conf.MasterDbConfig
  28. driveSource := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8",
  29. c.User, c.Pwd, c.Host, c.Port, c.DbName)
  30. engine, err := xorm.NewEngine(conf.DriverName, driveSource)
  31. if err != nil {
  32. log.Fatal("dbhelper", "DbInstanceMaster", err)
  33. return nil
  34. }
  35. //Debug mode
  36. engine.ShowSQL(true)
  37. engine.Logger().SetLevel(log2.LOG_DEBUG)
  38. //Log
  39. engine.SetTZLocation(conf.SysTimeLocation)
  40. //performance
  41. cacher := caches.NewLRUCacher(caches.NewMemoryStore(), 1000)
  42. engine.SetDefaultCacher(cacher)
  43. masterEngine = engine
  44. return engine
  45. }
  46. // InstanceSlave Slave
  47. func InstanceSlave() *xorm.Engine {
  48. if slaveEngine != nil {
  49. return slaveEngine
  50. }
  51. lock.Lock()
  52. defer lock.Unlock()
  53. if slaveEngine != nil {
  54. return slaveEngine
  55. }
  56. c := conf.SlaveDbConfig
  57. driveSource := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8",
  58. c.User, c.Pwd, c.Host, c.Port, c.DbName)
  59. engine, err := xorm.NewEngine(conf.DriverName, driveSource)
  60. if err != nil {
  61. log.Fatal("dbhelper", "DbInstanceMaster", err)
  62. return nil
  63. }
  64. engine.SetTZLocation(conf.SysTimeLocation)
  65. slaveEngine = engine
  66. return engine
  67. }
  68. // Slave
  69. func InstanceIDServer() *xorm.Engine {
  70. if iddbEngine != nil {
  71. return iddbEngine
  72. }
  73. lock.Lock()
  74. defer lock.Unlock()
  75. if iddbEngine != nil {
  76. return iddbEngine
  77. }
  78. c := conf.IDDbConfig
  79. driveSource := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8",
  80. c.User, c.Pwd, c.Host, c.Port, c.DbName)
  81. engine, err := xorm.NewEngine(conf.DriverName, driveSource)
  82. if err != nil {
  83. log.Fatal("dbhelper", "DbInstanceIDServer", err)
  84. return nil
  85. }
  86. engine.SetTZLocation(conf.SysTimeLocation)
  87. iddbEngine = engine
  88. return engine
  89. }