main.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "strconv"
  6. _ "think-go/models"
  7. _ "think-go/routers"
  8. "think-go/utils"
  9. "time"
  10. "github.com/beego/beego/v2/client/orm"
  11. beego "github.com/beego/beego/v2/server/web"
  12. _ "github.com/go-sql-driver/mysql"
  13. )
  14. const (
  15. defaultMaxIdleConns = 10
  16. defaultMaxOpenConns = 100
  17. defaultConnMaxLife = 300
  18. )
  19. func getStringConfig(key string, fallback string) string {
  20. v, err := beego.AppConfig.String(key)
  21. if err != nil || v == "" {
  22. return fallback
  23. }
  24. return v
  25. }
  26. func getIntConfig(key string, fallback int) int {
  27. raw, err := beego.AppConfig.String(key)
  28. if err != nil || raw == "" {
  29. return fallback
  30. }
  31. v, err := strconv.Atoi(raw)
  32. if err != nil || v <= 0 {
  33. log.Printf("invalid config %s=%q, fallback=%d", key, raw, fallback)
  34. return fallback
  35. }
  36. return v
  37. }
  38. func buildMySQLDSN() string {
  39. user := getStringConfig("db_user", "root")
  40. password := getStringConfig("db_password", "root")
  41. host := getStringConfig("db_host", "127.0.0.1")
  42. port := getStringConfig("db_port", "3306")
  43. name := getStringConfig("db_name", "gva")
  44. charset := getStringConfig("db_charset", "utf8mb4")
  45. parseTime := getStringConfig("db_parse_time", "True")
  46. loc := getStringConfig("db_loc", "Local")
  47. return fmt.Sprintf(
  48. "%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=%s&loc=%s",
  49. user,
  50. password,
  51. host,
  52. port,
  53. name,
  54. charset,
  55. parseTime,
  56. loc,
  57. )
  58. }
  59. func init() {
  60. if err := orm.RegisterDriver("mysql", orm.DRMySQL); err != nil {
  61. log.Fatalf("register mysql driver failed: %v", err)
  62. }
  63. dbConn := getStringConfig("sqlconn", "")
  64. if dbConn == "" {
  65. dbConn = buildMySQLDSN()
  66. }
  67. maxIdle := getIntConfig("db_max_idle_conns", defaultMaxIdleConns)
  68. maxOpen := getIntConfig("db_max_open_conns", defaultMaxOpenConns)
  69. connLife := getIntConfig("db_conn_max_lifetime_sec", defaultConnMaxLife)
  70. if err := orm.RegisterDataBase(
  71. "default",
  72. "mysql",
  73. dbConn,
  74. orm.MaxIdleConnections(maxIdle),
  75. orm.MaxOpenConnections(maxOpen),
  76. orm.ConnMaxLifetime(time.Duration(connLife)*time.Second),
  77. ); err != nil {
  78. log.Fatalf("register database failed: %v", err)
  79. }
  80. if runmode, _ := beego.AppConfig.String("runmode"); runmode == "dev" {
  81. orm.Debug = true
  82. }
  83. if err := utils.InitRedis(); err != nil {
  84. log.Fatalf("init redis failed: %v", err)
  85. }
  86. if err := utils.InitWxPay(); err != nil {
  87. log.Fatalf("init wxpay failed: %v", err)
  88. }
  89. }
  90. func main() {
  91. defer utils.CloseRedis()
  92. beego.Run()
  93. }