config.go 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package config
  2. import (
  3. "errors"
  4. "fmt"
  5. "strconv"
  6. "github.com/beevik/etree"
  7. )
  8. var SerCfg *ServiceConfig
  9. type WebConfig struct {
  10. ListenPort int
  11. }
  12. type DbConfig struct {
  13. DbDriver string
  14. DbAddress string
  15. DbName string
  16. DbPort string
  17. DbUser string
  18. DbPwd string
  19. }
  20. type RedisConfig struct {
  21. Address string
  22. Port int
  23. TimeOut int
  24. ConnNum int
  25. DbNum int
  26. Pwd string
  27. }
  28. type ServiceConfig struct {
  29. WebCfg WebConfig
  30. DbCfg DbConfig
  31. RedisCfg RedisConfig
  32. }
  33. func (c *ServiceConfig) Init(path string) error {
  34. SerCfg = &ServiceConfig{}
  35. cfgfile := etree.NewDocument()
  36. err := cfgfile.ReadFromFile(path)
  37. if err != nil {
  38. fmt.Println("Read config file failed")
  39. return err
  40. }
  41. root := cfgfile.SelectElement("Configuration")
  42. if root == nil {
  43. return errors.New("read config file failed")
  44. }
  45. // web配置
  46. websettings := root.SelectElements("WebSetting")
  47. for _, setting := range websettings {
  48. web_listenport := setting.SelectElement("ListenPort")
  49. if web_listenport == nil {
  50. return errors.New("read web listen port failed")
  51. }
  52. ret, err := strconv.ParseUint(web_listenport.SelectAttrValue("value", "8080"), 10, 32)
  53. if err != nil {
  54. return errors.New("read web listen port is invalid:")
  55. }
  56. SerCfg.WebCfg.ListenPort = int(ret)
  57. }
  58. // 数据库配置
  59. dbsettings := root.SelectElements("DbSetting")
  60. for _, setting := range dbsettings {
  61. // 数据库驱动
  62. db_driver := setting.SelectElement("DbDriver")
  63. if db_driver == nil {
  64. return errors.New("read db driver failed")
  65. }
  66. SerCfg.DbCfg.DbDriver = db_driver.SelectAttrValue("value", "oci8")
  67. // 数据库地址
  68. db_address := setting.SelectElement("DbAddress")
  69. if db_address == nil {
  70. return errors.New("read db address failed")
  71. }
  72. SerCfg.DbCfg.DbAddress = db_address.SelectAttrValue("value", "0.0.0.0")
  73. // 数据库名
  74. db_name := setting.SelectElement("DbName")
  75. if db_name == nil {
  76. return errors.New("read db name failed")
  77. }
  78. SerCfg.DbCfg.DbName = db_name.SelectAttrValue("value", "orcl")
  79. // 数据库端口
  80. db_port := setting.SelectElement("DbPort")
  81. if db_port == nil {
  82. return errors.New("read db port failed")
  83. }
  84. SerCfg.DbCfg.DbPort = db_port.SelectAttrValue("value", "1521")
  85. // 数据库名
  86. db_user := setting.SelectElement("DbUser")
  87. if db_user == nil {
  88. return errors.New("read db user failed")
  89. }
  90. SerCfg.DbCfg.DbUser = db_user.SelectAttrValue("value", "mtp2_test01")
  91. // 数据库密码
  92. db_pwd := setting.SelectElement("DbPwd")
  93. if db_pwd == nil {
  94. return errors.New("read db password failed")
  95. }
  96. SerCfg.DbCfg.DbPwd = db_pwd.SelectAttrValue("value", "muchinfo")
  97. }
  98. // Redis配置
  99. redissettings := root.SelectElements("RedisSetting")
  100. for _, setting := range redissettings {
  101. // 地址
  102. redis_address := setting.SelectElement("Address")
  103. if redis_address == nil {
  104. return errors.New("read redis address failed")
  105. }
  106. SerCfg.RedisCfg.Address = redis_address.SelectAttrValue("value", "127.0.0.1")
  107. // 端口
  108. redis_port := setting.SelectElement("Port")
  109. if redis_port == nil {
  110. return errors.New("read redis port failed")
  111. }
  112. ret, err := strconv.ParseUint(redis_port.SelectAttrValue("value", "5007"), 10, 32)
  113. if err != nil {
  114. return errors.New("read redis port is invalid:")
  115. }
  116. SerCfg.RedisCfg.Port = int(ret)
  117. // 超时时长
  118. redis_timeout := setting.SelectElement("Timeout")
  119. if redis_timeout == nil {
  120. return errors.New("read redis timeout failed")
  121. }
  122. ret, err = strconv.ParseUint(redis_timeout.SelectAttrValue("value", "3"), 10, 32)
  123. if err != nil {
  124. return errors.New("read redis timeout is invalid:")
  125. }
  126. SerCfg.RedisCfg.TimeOut = int(ret)
  127. // 连接数
  128. redis_connnum := setting.SelectElement("ConnNum")
  129. if redis_connnum == nil {
  130. return errors.New("read redis connnet num failed")
  131. }
  132. ret, err = strconv.ParseUint(redis_connnum.SelectAttrValue("value", "1"), 10, 32)
  133. if err != nil {
  134. return errors.New("read redis connnet num is invalid:")
  135. }
  136. SerCfg.RedisCfg.ConnNum = int(ret)
  137. // 库编号
  138. redis_dbnum := setting.SelectElement("DbNum")
  139. if redis_dbnum == nil {
  140. return errors.New("read redis db num failed")
  141. }
  142. ret, err = strconv.ParseUint(redis_dbnum.SelectAttrValue("value", "0"), 10, 32)
  143. if err != nil {
  144. return errors.New("read redis db num is invalid:")
  145. }
  146. SerCfg.RedisCfg.DbNum = int(ret)
  147. // 密码
  148. redis_pwd := setting.SelectElement("Pwd")
  149. if redis_pwd == nil {
  150. return errors.New("read redis password failed")
  151. }
  152. SerCfg.RedisCfg.Pwd = redis_pwd.SelectAttrValue("value", "")
  153. }
  154. return nil
  155. }
  156. func (c *ServiceConfig) GetWebListenPort() int {
  157. return SerCfg.WebCfg.ListenPort
  158. }
  159. func (c *ServiceConfig) GetDbDriver() string {
  160. return SerCfg.DbCfg.DbDriver
  161. }
  162. func (c *ServiceConfig) GetDbSource() string {
  163. dbsource := fmt.Sprintf("%s/%s@%s:%s/%s",
  164. SerCfg.DbCfg.DbUser,
  165. SerCfg.DbCfg.DbPwd,
  166. SerCfg.DbCfg.DbAddress,
  167. SerCfg.DbCfg.DbPort,
  168. SerCfg.DbCfg.DbName)
  169. return dbsource
  170. }
  171. func (c *ServiceConfig) GetRedisAddress() string {
  172. redisaccress := fmt.Sprintf("%s:%d",
  173. SerCfg.RedisCfg.Address,
  174. SerCfg.RedisCfg.Port)
  175. return redisaccress
  176. }
  177. func (c *ServiceConfig) GetRedisPwd() string {
  178. return SerCfg.RedisCfg.Pwd
  179. }
  180. func (c *ServiceConfig) GetRedisDbNum() int {
  181. return SerCfg.RedisCfg.DbNum
  182. }
  183. func (c *ServiceConfig) GetRedisConnNum() int {
  184. return SerCfg.RedisCfg.ConnNum
  185. }
  186. func (c *ServiceConfig) GetRedisTimeout() int {
  187. return SerCfg.RedisCfg.TimeOut
  188. }