dbhelper.go 2.0 KB

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