一,基本介绍
yml 配置文件保存到git服务器,例如 github.com 或 gitee.com
微服务启动时,从服务器获取配置文件
二,准备工作
1)在父工程springcloud1下新建文件夹 config
2)把2,3,4三个项目的配置文件,复制到config目录,并修改名称
注:一般运行配置用dev,测试用test,生产用prod,官方文档这么写的,当然,取名没有要求,这样会显得更专业些。
3)分别在三个配置文件中添加配置
默认情况下,git仓库中的命令会覆盖本地命令参数,端口这样的参数,不可以被随便修改,所以设置不覆盖。
cloud:
config:
override-none: true
注意是在spring下
4)创建仓库
双击 shift
可以选用父工程作为仓库
5)提交文件
没创建远程仓库的话,创建远程仓库。
push
三,搭建配置中心服务器
1.新建模块
添加eureka client,config server依赖
2.修改pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springcloud1</artifactId>
<groupId>com.drhj</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.drhj</groupId>
<artifactId>sp09-config</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>sp09-config</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.配置application.yml
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://gitee.com/ronghuading/springcloud1
search-paths: /config #/子目录/子目录/子目录 不用写/tree/master
server:
port: 6001
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka,http://eureka2:2002/eureka
如果起不来,把注解删除了
注意,这里的uri是仓库地址,search-paths是config所在仓库的子目录
4.启动类添加@EnableConfigServer
package com.drhj.sp09;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@EnableConfigServer
@SpringBootApplication
public class Sp09ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(Sp09ConfigApplication.class, args);
}
}
5.测试
1)启动eureka服务器,检查是否又config-server 的注册信息
http://eureka1:2001/
2)访问配置中心的配置文件
http://localhost:6001/item-service/dev
http://localhost:6001/user-service/dev
http://localhost:6001/order-service/dev
四,配置中心客户端
1.注销服务原有配置
将item-service,user-service,order-service的application.yml中的所有配置都注销
2.添加config依赖
在三个服务的pom.xml中添加如下
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
3.配置bootstrap.yml
创建bootstrap.yml文件,这里以user-service为例,因为user服务中添加用户信息的原因,所以没有获取配置信息启动不了
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka,http://eureka2:2002/eureka
spring:
cloud:
config:
discovery:
enabled: true #从注册中心发现配置中心的地址
service-id: config-server
name: user-service
profile: dev
item-serice,order-service同样的配置,改变 对应的name
4,重启服务
重启user-service,获取到仓库配置,启动成功
五,config bus + rabbitmq 消息总线配置刷新
post 请求消息总线刷新端点,服务器会向 rabbitmq 发布刷新消息,接收到消息的微服务会向配置服务器请求刷新配置信息
Bus 是spring cloud config 提供的一个辅助完成消息收发操作的组件以及配置的刷新
RabbitMQ详见:RabbitMQ基础运用
1.准备工作
在配置项目 config中添加 actuaor 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在需要刷新配置的项目即这里的 item-service,user-service,order-service和配置项目config中添加 Bus, RabbitMQ, binder-rabbit 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
在配置项目config的yml文件中添加配置
1)暴露 bus-refrush: m.e.w.e.i=bus-refrush
2)rabbitmq连接
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://gitee.com/ronghuading/springcloud1
search-paths: /config
rabbitmq:
host: 192.168.64.140
port: 5672
username: admin
password: admin
virtual-host: drhj #如果创建了虚拟空间,则添加,注意加斜杠,使用默认的无需添加
server:
port: 6001
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka,http://eureka2:2002/eureka
management:
endpoints:
web:
exposure:
include: bus-refresh
2.配置刷新
修改config目录的三个文件并提交
1)添加rabbitmq的连接
2)提交推送到远程仓库
启动项目测试
注意启动顺序是
eureka -> config -> item,user,order -> zuul
正常启动后,清空控制台信息
使用postman 访问 http://localhost:6001/actuator/bus-refresh 注意要把所有参数,请求头等等都清空,最好创建新的测试
查看控制台
出现如上表示刷新成功
想只刷新某一个服务,添加子路径即可,如:http://localhost:6001/actuator/bus-refresh/item-service
3.刷新注入
业务描述
在用户模块中,由于是测试,所以并没有连接数据库,而是在application.yml中手动添加一些用户数据,在需要查询数据时注入即可
现在我需要添加用户,或者修改用户信息,我们需要在配置中心进行相关操作。
配置修改
1)在config中的对应配置添加信息,如下
2)提交远程仓库
3)刷新配置
4)查看效果
按道理说,我们配置中有的用户数据,出现的时如上的现象,然而
刚添加的用户信息并没有注入到对象中。
@RefreshScope
该注解是把刷新的配置信息,重新注入到对象中
在需要重新注入配置数据的对象上添加这个注解,刷新的配置才能重新注入到对象中;
如果没有这个注解,即使刷新到新配置,也不会重新向对象注入
1)在需要注入的类上添加注解
2)重启修改的服务
3)刷新配置
4)查看效果
注入刷新成功!
4.总结
所以要实现配置的更改,只需要在存放yml文件的config中对对应的yml文件进行修改,然后上传git远程仓库,通过使用rabbitmq,手动bus刷新,即可完成配置的修改。