cnn.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package multi_db
  2. import (
  3. "errors"
  4. "fmt"
  5. "sync"
  6. "git.shuncheng.lu/bigthing/gocommon/pkg/conf"
  7. "git.shuncheng.lu/bigthing/gocommon/pkg/database/common_db"
  8. "git.shuncheng.lu/bigthing/gocommon/pkg/internal/util"
  9. )
  10. var (
  11. notFoundError = func(dbName string) error {
  12. return errors.New(fmt.Sprintf("MultiDb not fount %s db", dbName))
  13. }
  14. lock sync.RWMutex
  15. multiMap map[string]common_db.DbConn = map[string]common_db.DbConn{}
  16. )
  17. func Init() error {
  18. dbNameStr := conf.GetString("multi_db", "db_name")
  19. dbNames := util.SplitIgnoreSpace(dbNameStr, ",")
  20. for _, elem := range dbNames {
  21. conn, err := common_db.NewDbConn(elem)
  22. if err != nil {
  23. return err
  24. }
  25. setDb(elem, conn)
  26. util.Infof("[MultiDB] init db %s success !", elem)
  27. }
  28. return nil
  29. }
  30. func setDb(dbName string, conn common_db.DbConn) {
  31. lock.Lock()
  32. defer lock.Unlock()
  33. multiMap[dbName] = conn
  34. }
  35. func GetDb(dbName string) (common_db.DbConn, error) {
  36. lock.RLock()
  37. defer lock.RUnlock()
  38. db, isExist := multiMap[dbName]
  39. if isExist {
  40. return db, nil
  41. }
  42. return nil, notFoundError(dbName)
  43. }