springcloud config 还有apollo也是做配置中心的
官方文档1:https://spring.io/guides/gs/centralized-configuration/
官方文档2:https://cloud.spring.io/spring-cloud-config/reference/html/
代码地址:https://download.youkuaiyun.com/download/qq_16946803/12377913
一、创建Git(码云)代码管理仓库
1.1、示例
1.2、获取三个参数:https://gitee.com/xxxxxxxx/springcloud-config.git 和 目录名(每个项目配置文件的分类)和master
1.3、定义的文件名字必须与下面图片中的名字相同(区分服务名-下面4.5还会提到)
spring.application.name=service-config-client
1.4、Git命名规范与发布(注意命名规范)
二、创建注册中心eureka项目
此过程省略搭建过程
三、创建config-server项目
3.1、引入需要的jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<!--配置中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
3.2、主配置类添加注解
@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
3.3、 yml文件中添加配置(这里要用到上面准备的三个参数)
注:只需要复制连接到Git配置就行
server.port=2000
#注册中心服务名
spring.application.name=service-config-server
#服务端地址(多个用,号隔开)
eureka.client.serviceUrl.defaultZone=http://admin:admin@127.0.0.1:8002/eureka/
# 采用IP注册
eureka.instance.preferIpAddress=true
# 定义实例ID格式
eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
#连接到Git
#上面准备的地址
spring.cloud.config.server.git.uri=https://gitee.com/whzhang110/springcloud-config.git
#上面准备的目录名
spring.cloud.config.server.git.search-paths=csconfigclient
#上面准备的分支
spring.cloud.config.label=master
#spring.cloud.config.server.git.username=******
#spring.cloud.config.server.git.password=******
四、创建config-client项目
4.1、引入jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
4.2、主配置文件只配置eureka
@SpringBootApplication
@EnableEurekaClient
4.3、配置文件新增bootstrap.properties文件,为了避免No instances found of configserver (config-server)错误,将application.properties文件中的配置全部移入bootstrap.properties中
server.port=2001
#注册中心服务名
spring.application.name=service-config-client
#服务端地址(多个用,号隔开)
eureka.client.serviceUrl.defaultZone=http://admin:admin@127.0.0.1:8002/eureka/
# 定义实例ID格式
eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
#读取环境 开发|测试|试运营
spring.cloud.config.profile=sit
#config-server项目的环境
spring.cloud.config.discovery.service-id=service-config-server
#开启读取权限
spring.cloud.config.discovery.enabled=true
#
spring.cloud.config.label=master
4.4、在controller中添加以下代码(做测试,正式环境会直接更改配置文件信息)
@RestController
public class TestController {
@Value("${configInfo}")
private String configInfo;
@GetMapping("/getConfigInfo")
public Object getConfigInfo(){
return configInfo;
}
}
4.5、先访问 http://127.0.0.1:2001/ser vice-config-client-slt.properties 看看文件是否改变
4.6、测试是否能拿到码云中的配置
4.7、注意事项
注:以下的参数对应bootstrap.properties配置文件和controller中的属性名
——————————重点-原理-必读——————————
4.6、以上操作只能证明config-server服务可以冲Git(码云)中拿到数据,还是无法热更配置文件(配置文件在服务启动时已经放进JVM虚拟机中,一般无法更改)
上面的更新在config-service中可以更新,但是config-client中无法热更,需要再config-client中添加以下配置
以下配置都在config-client中
———————————————————————————
五、手动刷新JVM中的配置文件——refresh手动刷新
5.1、不重启服务器更新配置文件,两种方法:
5.1.1、定时刷新(影响性能)
5.1.2、手动刷新(推荐)缺点:还是无法做到热更
5.2、第4点缺点说明
5.2.1、修改Git(码云)中的参数
5.2.2、config-server项目请求Git(码云),数据已经更新
5.2.3、config-client请求后参数没有变化,说明JVM中的配置文件没有更新
5.3、开始主题——在config-client中添加
5.3.1、导入新的jar包
<!-- 以上省略其它jar包,复制本文档上方的jar包即可-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
5.3.2、controller层中添加注解
注:@RefreshScope会刷新在sprign ioc中所有bean中使用@Value的值,但是在配置类中使用方法去配置的其他类参数并不会改变,其它类的@Value值不会刷新
@RefreshScope
@RestController
public class TestController {
5.3.3、配置文件中添加
management.endpoints.web.exposure.include=*
5.3.4、启动项目
5.4、测试是否成功
5.4.1、请求前:
5.4.2、请求中:http://127.0.0.1:2001/actuator/refresh
5.4.3、请求后:
5.5、refresh手动刷新成功
六、中文乱码
参考链接:https://www.cnblogs.com/huanzi-qch/p/10149547.html 中文乱码
七、其它
7.1、
7.2、有哪些分布式配置中心
7.3、Springcloudconfig分布式配置中心原理http://www.mayikt.com/course/video/2403
7.3.1、Git&码云存放分布式配置文件(持久存储)
7.3.2、ConfigServer:缓存配置文件服务器(临时存储)
7.3.3、ConfigClient:读取ConfigServer临时存储配置文件信息
7.4、
7.5、
7.6、ConfigServer为什么要放到eureka中
- 做集群
- 通过别名调用