mysql.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package mysql
  2. import (
  3. "MeterService/core/config"
  4. "database/sql"
  5. "errors"
  6. "fmt"
  7. "sync"
  8. orm "github.com/jinzhu/gorm"
  9. _ "github.com/jinzhu/gorm/dialects/mysql"
  10. )
  11. type MySqlPool struct{}
  12. var once sync.Once
  13. var err error
  14. var db *orm.DB
  15. func GetDb() *orm.DB {
  16. once.Do(func() {
  17. db = openMySqlPool()
  18. })
  19. return db
  20. }
  21. func OpenMySql() *sql.DB {
  22. return openMySqlPool().DB()
  23. }
  24. func openMySqlPool() *orm.DB {
  25. dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
  26. config.C.Mysql.Username, config.C.Mysql.Password,
  27. config.C.Mysql.Host, config.C.Mysql.Port, config.C.Mysql.Name)
  28. db, err := orm.Open("mysql", dsn)
  29. if err != nil {
  30. panic(errors.New("mysql连接失败。" + err.Error()))
  31. }
  32. if config.C.Mysql.MaxIdleConns > 0 {
  33. db.DB().SetMaxIdleConns(config.C.Mysql.MaxIdleConns)
  34. }
  35. if config.C.Mysql.MaxOpenConns > 0 {
  36. db.DB().SetMaxOpenConns(config.C.Mysql.MaxOpenConns)
  37. }
  38. if config.C.Mysql.Log {
  39. db.LogMode(config.C.Mysql.Log)
  40. }
  41. return db
  42. }
  43. func CloseDb(db *orm.DB) {
  44. err := db.Close()
  45. if err != nil {
  46. return
  47. } else {
  48. panic(err)
  49. }
  50. }
  51. func (pool *MySqlPool) InitPool() (isSuc bool) {
  52. dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
  53. config.C.Mysql.Username, config.C.Mysql.Password,
  54. config.C.Mysql.Host, config.C.Mysql.Port, config.C.Mysql.Name)
  55. db, err := orm.Open("mysql", dsn)
  56. if err != nil {
  57. panic(err)
  58. return false
  59. }
  60. // 连接数配置也可以写入配置,在此读取
  61. if config.C.Mysql.MaxIdleConns > 0 {
  62. db.DB().SetMaxIdleConns(config.C.Mysql.MaxIdleConns)
  63. }
  64. if config.C.Mysql.MaxOpenConns > 0 {
  65. db.DB().SetMaxOpenConns(config.C.Mysql.MaxOpenConns)
  66. }
  67. return true
  68. }