main.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package main
  2. import (
  3. "context"
  4. "mtp2_if/controllers/other"
  5. "net/http"
  6. "os"
  7. "os/signal"
  8. "syscall"
  9. "time"
  10. "mtp2_if/config"
  11. "mtp2_if/db"
  12. "mtp2_if/logger"
  13. "mtp2_if/rediscli"
  14. "mtp2_if/routers"
  15. "github.com/DeanThompson/ginpprof"
  16. "github.com/gin-gonic/gin"
  17. _ "github.com/go-sql-driver/mysql"
  18. _ "github.com/mattn/go-oci8"
  19. )
  20. // @title MTP2.0 查询服务 API
  21. // @version 1.0
  22. // @description 新的查询服务,替代原通用查询服务。游客Token:c886a057f3d820d4dbc41473686c7c2d
  23. // @termsOfService http://www.muchinfo.cn
  24. //
  25. // @securityDefinitions.apikey ApiKeyAuth
  26. // @in header
  27. // @name Authorization
  28. //
  29. // @securityDefinitions.apikey LoginID
  30. // @in header
  31. // @name LoginID
  32. //
  33. // @securityDefinitions.apikey Group
  34. // @in header
  35. // @name Group
  36. //
  37. // @BasePath /api
  38. var _VERSION_ = "default"
  39. var _GITHASH_ = "default"
  40. func main() {
  41. cmd := other.CmdLine{OriCmd: os.Args}
  42. // 初始化配置
  43. err := config.SerCfg.Init("config/config.xml")
  44. if err != nil {
  45. println("read config file failed:", err)
  46. return
  47. }
  48. // 初始化日志组件
  49. err = logger.Init(config.SerCfg.GetLogSetting())
  50. if err != nil {
  51. println("init logger failed:", err)
  52. return
  53. }
  54. logger.GetLogger().Debugf("server version:%v", _VERSION_)
  55. logger.GetLogger().Debugf("server git hash:%v", _GITHASH_)
  56. other.VERSION, other.GITHASH = _VERSION_, _GITHASH_
  57. if cmd.IsInit("oracle") {
  58. // 初始化数据库引擎
  59. err = db.InitDbEngine()
  60. if err != nil {
  61. logger.GetLogger().Errorf("init db engine failed:%v", err.Error())
  62. return
  63. }
  64. go db.StartCheckConnection(0)
  65. defer db.Close()
  66. }
  67. if cmd.IsInit("mongodb") {
  68. // 初始化MongoDB引擎
  69. err = db.InitMongoDB()
  70. if err != nil {
  71. logger.GetLogger().Errorf("init mongodb engine failed:%v", err.Error())
  72. return
  73. }
  74. go db.StartCheckConnection(2)
  75. defer db.CloseMongoDB()
  76. }
  77. if cmd.IsInit("mysql") {
  78. // 初始化MySQL引擎
  79. err = db.InitMySQLDbEngine()
  80. if err != nil {
  81. logger.GetLogger().Errorf("init mysql engine failed:%v", err.Error())
  82. return
  83. }
  84. go db.StartCheckConnection(1)
  85. defer db.CloseMySQL()
  86. }
  87. if cmd.IsInit("redis") {
  88. // 初始化Redis客户端
  89. err = rediscli.InitRedisCli()
  90. if err != nil {
  91. logger.GetLogger().Errorf("init redis client failed:%v", err.Error())
  92. return
  93. }
  94. defer rediscli.CloseReidsClient()
  95. }
  96. if config.SerCfg.GetDebugMode() {
  97. gin.SetMode(gin.DebugMode)
  98. } else {
  99. gin.SetMode(gin.ReleaseMode)
  100. }
  101. // 设置超时
  102. timeout := 15 * time.Second
  103. // 初始化路由
  104. r := routers.InitRouter()
  105. // debug模式启用pprof
  106. if config.SerCfg.GetDebugMode() {
  107. dm := r.Group("/debug/pprof")
  108. ginpprof.WrapGroup(dm)
  109. timeout = 60 * time.Second
  110. }
  111. // 声明web服务
  112. webser := &http.Server{
  113. Handler: r,
  114. Addr: config.SerCfg.GetWebListenAddr(),
  115. WriteTimeout: timeout,
  116. ReadTimeout: timeout,
  117. }
  118. cxt, cancel := context.WithCancel(context.Background())
  119. defer cancel()
  120. // 启动服务
  121. c := make(chan struct{}, 1)
  122. go func() {
  123. defer close(c)
  124. if err := webser.ListenAndServe(); err != nil {
  125. logger.GetLogger().Errorf("Start service failed[%s].", err.Error())
  126. c <- struct{}{}
  127. }
  128. }()
  129. // 信号控制
  130. s := make(chan os.Signal, 1)
  131. signal.Notify(s, syscall.SIGINT, syscall.SIGTERM)
  132. select {
  133. case <-s:
  134. logger.GetLogger().Debug("Shutdown service...")
  135. timeCxt, tCancel := context.WithTimeout(cxt, 5*time.Second)
  136. defer tCancel()
  137. if err := webser.Shutdown(timeCxt); err != nil {
  138. logger.GetLogger().Errorf("Shutdown service failed: %s", err.Error())
  139. }
  140. case <-c:
  141. }
  142. signal.Stop(s)
  143. defer close(s)
  144. logger.GetLogger().Debug("Service stopped")
  145. }