/
config.go
99 lines (90 loc) · 2.3 KB
/
config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package config
import (
"github.com/micro/go-micro/config"
"github.com/micro/go-micro/config/source/consul"
"github.com/micro/go-micro/util/log"
"sync"
)
var (
err error
)
var (
defaultConfigPath = "micro/config/cluster" // 默认的仓库地址
defaultConsulServerAddr = "127.0.0.1:8500"
consulConfig defaultConsulConfig
mysqlConfig defaultMysqlConfig
jwtConfig defaultJwtConfig
redisConfig defaultRedisConfig
m sync.RWMutex
inited bool
)
// Init 初始化配置
func Init() {
m.Lock()
defer m.Unlock()
if inited {
log.Logf("[Init] 配置已经初始化过")
return
}
// 从注册中心读取配置
consulSource := consul.NewSource(
consul.WithAddress(defaultConsulServerAddr),
consul.WithPrefix(defaultConfigPath),
consul.StripPrefix(true),
)
// 创建新的配置
conf := config.NewConfig()
if err := conf.Load(consulSource); err != nil {
log.Logf("load config errr!!!", err)
}
// 侦听文件变动
watcher, err := conf.Watch()
if err != nil {
log.Fatalf("[Init] 侦听consul配置中心 watcher异常,%s", err)
panic(err)
}
go func() {
for {
v, err := watcher.Next()
if err != nil {
log.Fatalf("侦听consul配置中心 异常, %s", err)
return
}
if err = conf.Load(consulSource); err != nil {
panic(err)
}
log.Logf("consul配置中心有变化,%s", string(v.Bytes()))
}
}()
// 赋值
if err := conf.Get("consul").Scan(&consulConfig); err != nil {
log.Logf("consul配置加载异常:%s", err)
}
if err := conf.Get("mysql").Scan(&mysqlConfig); err != nil {
log.Logf("mysql配置加载异常:%s", err)
}
if err := conf.Get("redis").Scan(&redisConfig); err != nil {
log.Logf("redis配置加载异常:%s", err)
}
if err := conf.Get("jwt").Scan(&jwtConfig); err != nil {
log.Logf("jwt配置加载异常:%s", err)
}
// 标记已经初始化
inited = true
}
// GetMysqlConfig 获取mysql配置
func GetMysqlConfig() (ret MysqlConfig) {
return mysqlConfig
}
// GetConsulConfig 获取Consul配置
func GetConsulConfig() (ret ConsulConfig) {
return consulConfig
}
// GetJwtConfig 获取Jwt配置
func GetJwtConfig() (ret JwtConfig) {
return jwtConfig
}
// GetRedisConfig 获取Redis配置
func GetRedisConfig() (ret RedisConfig) {
return redisConfig
}