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

71 lines
1.5 KiB

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