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

86 lines
1.8 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. if dsn.Item.MaxIdleConns <= 0 {
  38. engine.SetMaxIdleConns(200)
  39. } else {
  40. engine.SetMaxIdleConns(dsn.Item.MaxIdleConns)
  41. }
  42. if dsn.Item.MaxOpenConns <= 0 {
  43. engine.SetMaxOpenConns(200)
  44. } else {
  45. engine.SetMaxOpenConns(dsn.Item.MaxOpenConns)
  46. }
  47. if dsn.Item.ConnMaxLifetime > 0 {
  48. engine.SetConnMaxLifetime(time.Second * time.Duration(dsn.Item.ConnMaxLifetime))
  49. }
  50. engine.TZLocation, _ = time.LoadLocation("Asia/Shanghai")
  51. if runmode == "dev" {
  52. engine.ShowSQL(true)
  53. }
  54. ctx, _ := context.WithTimeout(context.Background(), time.Second*5)
  55. err = engine.PingContext(ctx)
  56. if err != nil {
  57. grlogs.GetAli("sql").Critical("---%s--- %s", alias, err.Error())
  58. os.Exit(-1)
  59. } else {
  60. engines[alias] = engine
  61. }
  62. }
  63. return
  64. }
  65. type XormInterface interface {
  66. Engine() *xorm.Engine
  67. }