统一初始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.

72 lines
1.5 KiB

  1. package db
  2. import (
  3. "context"
  4. _ "github.com/go-sql-driver/mysql"
  5. "github.com/go-xorm/xorm"
  6. "golib.gaore.com/GaoreGo/cast"
  7. "golib.gaore.com/GaoreGo/grlogs"
  8. _ "golib.gaore.com/GaoreGo/grlogs/logs/alils"
  9. "io"
  10. "os"
  11. "time"
  12. "xorm.io/core"
  13. )
  14. var engines map[string]*xorm.Engine
  15. func SelectXorm(name string) *xorm.Engine {
  16. if name == "" {
  17. name = DEFAULT
  18. }
  19. return engines[name]
  20. }
  21. func LoadXorm(dsns map[string]dsnConfig) (err error) {
  22. engines = make(map[string]*xorm.Engine)
  23. var writer io.Writer = grlogs.GetAli("sql")
  24. // 测试环境下输出sql
  25. runmode := os.Getenv("CENTER_RUNMODE")
  26. for alias, dsn := range dsns {
  27. grlogs.GetAli("sql").Debug("init_db 正在加载数据 %s", dsn.Dsn)
  28. engine, err := xorm.NewEngine(dsn.Driver, dsn.Dsn)
  29. if err != nil {
  30. grlogs.GetAli("sql").Critical(err.Error())
  31. }
  32. logger := xorm.NewSimpleLogger(writer)
  33. tbMapper := core.NewPrefixMapper(core.SnakeMapper{}, cast.ToString(dsn.Item.Prefix))
  34. engine.SetTableMapper(tbMapper)
  35. engine.SetLogger(logger)
  36. engine.SetMaxIdleConns(1000)
  37. engine.SetMaxOpenConns(1000)
  38. engine.TZLocation, _ = time.LoadLocation("Asia/Shanghai")
  39. engine.SetColumnMapper(core.SnakeMapper{})
  40. if runmode == "dev" {
  41. engine.ShowSQL(true)
  42. engine.ShowExecTime(true)
  43. }
  44. ctx, _ := context.WithTimeout(context.Background(), time.Second*5)
  45. err = engine.PingContext(ctx)
  46. if err != nil {
  47. grlogs.GetAli("sql").Critical("---%s--- %s", alias, err.Error())
  48. os.Exit(-1)
  49. } else {
  50. engines[alias] = engine
  51. }
  52. }
  53. return
  54. }
  55. type XormInterface interface {
  56. Engine() *xorm.Engine
  57. }