db_connector.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package database
  2. import (
  3. "eta_mini_ht_api/common/component/config"
  4. "eta_mini_ht_api/common/component/database/dialector"
  5. logger "eta_mini_ht_api/common/component/log"
  6. "eta_mini_ht_api/common/contants"
  7. "gorm.io/gorm"
  8. "os"
  9. "sync"
  10. )
  11. const (
  12. MAIN = "main"
  13. EMAS = "emas"
  14. ETA = "eta"
  15. etaDriver = "mysql"
  16. )
  17. var (
  18. dbOnce sync.Once
  19. etaDBOnce sync.Once
  20. )
  21. var dbInsts = make(map[string]*gorm.DB)
  22. func Register(name string, dbInst *gorm.DB) {
  23. if dbInst == nil {
  24. panic("数据库不能为空")
  25. }
  26. if _, ok := dbInsts[name]; ok {
  27. panic("当前数据库实例已注册:" + name)
  28. }
  29. dbInsts[name] = dbInst
  30. }
  31. func Select(name string) *gorm.DB {
  32. db := dbInsts[name]
  33. if db == nil {
  34. panic("数据库未初始化")
  35. }
  36. return db
  37. }
  38. func init() {
  39. //初始化主数据库
  40. dbOnce.Do(func() {
  41. dbConfig, ok := config.GetConfig(contants.DATABASE).(*config.DBConfig)
  42. if !ok {
  43. panic("初始化数据库失败,配置文件格式不正确")
  44. }
  45. driver := dbConfig.GetDriver()
  46. dns := dbConfig.GetUrl()
  47. open, err := gorm.Open(dialector.GetGormDial(driver).GetDial(dns), &gorm.Config{})
  48. if err != nil {
  49. logger.Error("初始化数据库失败:%v", err)
  50. os.Exit(0)
  51. }
  52. Register(MAIN, open)
  53. logger.Info("初始化主库数据库成功")
  54. //第三方的数据库
  55. initDataBases()
  56. })
  57. }
  58. func initDataBases() {
  59. initEtaDatabase()
  60. }
  61. func initEtaDatabase() {
  62. etaDBOnce.Do(func() {
  63. etaConfig, ok := config.GetConfig(contants.ETA).(*config.ETAConfig)
  64. if !ok {
  65. panic("初始化eta数据库失败,配置文件格式不正确")
  66. }
  67. dns := etaConfig.GetDBUrl()
  68. open, err := gorm.Open(dialector.GetGormDial(etaDriver).GetDial(dns), &gorm.Config{})
  69. if err != nil {
  70. logger.Error("初始化ETA数据库失败:%v", err)
  71. os.Exit(0)
  72. }
  73. Register(ETA, open)
  74. logger.Info("初始化ETA数据库成功")
  75. })
  76. }