Config 統一配置中心
server端
首先我们引入依赖,需要根据当前版本而定。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
再修改application类加入@EnableConfigServer注解
因为要注册到注册中心中,所以再引入一个依赖并加上@EnableDiscoveryClient注解。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
动态配置:进入yml文件中填写注册中心的地址,然后配置gitee或github,使用远程仓库来管理配置并做到动态刷新配置.
首先登陆码云
创建一个仓库,点击下载或克隆,复制地址。
补充yml
spring:
application:
name: config
cloud:
config:
server:
git:
uri: https://gitee.com/FYRT/u_bag_net.git
username: beibeirenzhe@qq.com
password: fyh1234123.
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
server:
port: 8083
client端
接下来在码云上U袋网的项目中创建一个user-config.yml的配置文件,并将user服务的配置复制进去,注意文件格式必须是x-x,如果是user.yml,那么默认也回事user-test.yml之类的。配置文件后缀为dev是生产环境,test是测试环境,一般都是建立两个文件。
接下来引入依赖,这里需要注意的是application类中不需要加注解
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
这个时候配置一下user服务的yml配置。
spring:
application:
name: user #文件前缀名
cloud:
config:
profile: config #文件后缀名
discovery:
enabled: true
service-id: CONFIG #config 服务名
接下来启动eureka,user,config三个服务。
这个时候user服务报错了。
原因如下:
通过启动日志可以发现:服务还是去 默认端口8888取配置中心的文件;这是怎么回事呢。其实就是一个配置文件优先级的问题;SpringCloud里面有个“启动上下文”,主要是用于加载远端的配置,也就是加载ConfigServer里面的配置,默认加载顺序为:加载bootstrap.*里面的配置 --> 链接configserver,加载远程配置 --> 加载application.*里面的配置; 总结:这里需要借助于“启动上下文”来处理加载远程配置;
所以只要将配置文件改为application.yml或bootstrap.yml文件即可。
然后我们再次启动user服务。
启动成功。
动态刷新
首先引入依赖,依赖需要看版本导入,服务会自动连接上rabbitmq,如果rabbitmq 端口和帐号都没有改变过是默认的,那就不需要配置rabbitmq,直接用docket 启动mq 即可,http://localhost:15672 查看队列信息,
docker语句:
docker run -d --net=host --name rabbitmq hub.c.163.com/library/rabbitmq:3.6.11-management
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
启动config服务与user服务就可以在rabbitmq管理界面看到两个队列。
这样就算启动成功了。
接下来在码云上的user-config.yml中加上env: test 配置
然后再到项目中加一个接口,并加入@RefreshScope注解
注入env属性
写一个接口用来测试
启动user服务访问接口
接下来去配置一下码云的webhooks,作用是在你操作完后请求一个接口,这里的话需要注意的是url必须是域名而不能是ip。所以我们可以用natapp映射一个域名。
注意:动态刷新的地址有版本差异,每个版本的都不一样mointor只是git提供的一个方案,
一般是 bus-refresh 之类的。
修改一下配置
再访问一次接口,动态刷新完成