dbhelper.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * @description:
  3. * @Author: CP
  4. * @Date: 2020-08-20 22:25:17
  5. * @FilePath: \construction_management\datasource\dbhelper.go
  6. */
  7. package datasource
  8. import (
  9. "fmt"
  10. "log"
  11. "sync"
  12. _ "github.com/go-sql-driver/mysql"
  13. "github.com/go-xorm/xorm"
  14. "github.com/spf13/viper"
  15. "go.mod/conf"
  16. )
  17. //互斥锁
  18. var dbLock sync.Mutex
  19. var masterInstance *xorm.Engine
  20. //单例模式
  21. func InstanceDbMaster() *xorm.Engine {
  22. if masterInstance != nil {
  23. return masterInstance
  24. }
  25. dbLock.Lock()
  26. defer dbLock.Unlock()
  27. if masterInstance != nil {
  28. return masterInstance
  29. }
  30. return NewDbMaster()
  31. }
  32. func GetEnvInfo(env string) bool {
  33. viper.AutomaticEnv()
  34. return viper.GetBool(env)
  35. }
  36. func InitConfig() {
  37. }
  38. func NewDbMaster() *xorm.Engine {
  39. debug := GetEnvInfo("Debug")
  40. configFilePrefix := "config"
  41. configFileName := fmt.Sprintf("%s-pro.yaml", configFilePrefix)
  42. if debug {
  43. configFileName = fmt.Sprintf("%s-debug.yaml", configFilePrefix)
  44. }
  45. v := viper.New()
  46. v.SetConfigFile(configFileName)
  47. if err := v.ReadInConfig(); err != nil {
  48. log.Fatal("读取配置文件出错:", err)
  49. return nil
  50. }
  51. if err := v.Unmarshal(&conf.MysqlConfig); err != nil {
  52. panic(err)
  53. }
  54. sourcename := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8",
  55. conf.MysqlConfig.User,
  56. conf.MysqlConfig.Pwd,
  57. conf.MysqlConfig.Host,
  58. conf.MysqlConfig.Port,
  59. conf.MysqlConfig.Datebase)
  60. instance, err := xorm.NewEngine(conf.DriverName, sourcename)
  61. if err != nil {
  62. log.Fatal("dbhelper.NewDbMaster NewEngine error ", err)
  63. return nil
  64. }
  65. //展示执行的sql语句
  66. instance.ShowSQL(true)
  67. masterInstance = instance
  68. return instance
  69. }