统一初始beego mvc 的方法
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
1.6 KiB

  1. package db
  2. import (
  3. "fmt"
  4. _ "github.com/go-sql-driver/mysql"
  5. _ "github.com/lib/pq"
  6. "golib.gaore.com/GaoreGo/grconfig"
  7. "golib.gaore.com/GaoreGo/grlogs"
  8. "path"
  9. )
  10. const DEFAULT = "default"
  11. var DbPrefix map[string]string = make(map[string]string)
  12. type dsnConfig struct {
  13. Dsn string
  14. Driver string
  15. Item *DbItem
  16. }
  17. type DbItem struct {
  18. User string `yaml:"user"`
  19. Pass string `yaml:"pass"`
  20. Host string `yaml:"host"`
  21. Port int `yaml:"port"`
  22. Name string `yaml:"name"`
  23. Driver string `yaml:"driver"`
  24. Prefix string `yaml:"prefix"`
  25. }
  26. func (d *DbItem) Dsn() string {
  27. return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&loc=Local&autocommit=true&timeout=5s", d.User, d.Pass, d.Host, d.Port, d.Name)
  28. }
  29. func init() {
  30. Reload()
  31. }
  32. func Reload(dir ...string) {
  33. var err error
  34. var configer *grconfig.Configer
  35. logger := grlogs.GetAli("sql")
  36. defer func() {
  37. if err != nil {
  38. logger.Critical(err.Error())
  39. }
  40. }()
  41. if len(dir) == 0 {
  42. configer = grconfig.New("conf/")
  43. } else {
  44. dir = append(dir, "conf/")
  45. configer = grconfig.New(path.Join(dir...))
  46. }
  47. dsns, err := GetDsn(configer)
  48. if err = LoadXorm(dsns); err != nil {
  49. logger.Critical(err.Error())
  50. }
  51. }
  52. func GetDsn(configer *grconfig.Configer) (DsnList map[string]dsnConfig, err error) {
  53. var items map[string]*DbItem
  54. DsnList = make(map[string]dsnConfig)
  55. err = configer.Item("db", &items)
  56. if err != nil {
  57. return
  58. }
  59. for alias, v := range items {
  60. dsn := v.Dsn()
  61. driver := v.Driver
  62. if driver == "" {
  63. driver = "mysql"
  64. }
  65. DsnList[alias] = dsnConfig{Dsn: dsn, Driver: driver, Item: v}
  66. }
  67. return
  68. }