dbhelper.go 2.1 KB

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