关系图如下:
config组件执行流程
1.启动config组件服务器端(如图cloudconfig-service),自动将码云的配置文件下拉到本地仓库
2.在config客户端配置config服务器的地址,将config客户端的配置文件也就可以使用.
3.1用户发送请求到config客户端
3.2config客户端从本地仓库中获取数据
3.3config服务器从码云上获取配置文件信息到本地仓库,数据以此返回回去
1.config服务器端
1.1导入依赖:
<!--项目cloud-config-server-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
1.2配置文件
server:
port: 40000
spring:
application:
name: 24Configserver
cloud:
config:
server:
git:
uri: 仓库地址 #新建git仓库地址
username: 码云账号@qq.com
password: 密码
package com.bigdata.microservice.cloud.config.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer //开启 configserver
public class ConfigServerStartApp {
public static void main (String[] args){
SpringApplication.run(ConfigServerStartApp.class,args);
}
}
2.config客户端
2.1导入依赖:
<!--项目cloud-config-client-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
</dependencies>
2.2 配置文件
因为application.yml是项目启动后在初始化数据的时候加载的,但是我们在初始化数据的时候必须 已经从 server 中获取数据,所以我们必须在初始化之前去加载数据, springboot 提供了一个bootstrap.yml 用于在初始化之前进行解析,其加载顺序会比application.yml早,所以我们可以将部分配置放到这里面来
bootstrap.yml
spring:
cloud:
config:
uri: http://localhost:40000 #配置 configserver 的地址,不是仓库地址
application:
name: testconfig #我们的 config client 查找文件的方式是 根据应用的名字加上active的值来匹配的,比如此处代表要找的文件叫testconfig-pro.yml
profiles:
active: pro
application.ym文件
server:
port: 41000
@SpringBootApplication
public class ConfigClientStartApp {
public static void main (String[] args){ SpringApplication.run(ConfigClientStartApp.class,args);
}
}
3.config注册中心(eureka)
3.1导入eureka依赖
<!--cloud-config-server-eureka-->
<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>
</dependencies>
3.2配置文件
erver:
port: 41000
spring:
application:
name: 31cloud-config-server-eureka
cloud:
config:
server:
git: #配置configserver从什么地方加载配置文件
uri: https://gitee.com/danny2005/{application}
eureka: #注册中心的地址
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka #curl风格
3.3启动类
package com.bigdata;
@SpringBootApplication @EnableEurekaClient //开启服务发现@EnableConfigServer //开启配置 server public class ConfigServerStartApp {
public static void main (String[] args){
SpringApplication.run(ConfigServerStartApp.class,args);
}
}
4.config组件整合eureka
4.1导入依赖
<!--cloud-config-client-eureka-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
4.2配置文件
#这个文件是启动时候就加载,优先级高于application.yml
spring:
application:
name: simple #这个就是我们的名字, 当前值和下面的 profile 组合起来代表我们的访问路径,比如此处访问的就是 simple-dev.yml
cloud:
config: #配置configserver的地址
profile: dev
label: master
discovery: ##服务发现
enabled: true #允许服务发现
service-id: 31cloud-config-server-eureka #配置configserver在eureka上面的名字
eureka: #注册中心的地址,必须配置在这个文件里面
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka #curl风格
4.3启动类
package com.bigdata;
@SpringBootApplication
@EnableEurekaClient
public class ConfigClientStartApp {
public static void main (String[] args){
SpringApplication.run(ConfigClientStartApp.class,args);
}
}
controller
package com.bigdata.controller;
@RestController
public class ClientController {
@Value("${spring.aaaa}") private String aaaa;
@GetMapping("/aaa") public String getAaaa() {
return aaaa;
}
}
5.手动刷新
5.1添加依赖
<!--cloud-config-client-eureka-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
5.2编写配置文件
management:
endpoints:
web:
exposure:
include: '*' #允许访问所有管理地址,不然无法访问刷新地址,如果指向访问某个管理地址,写具体地址就行,比如'/actuator/refresh'
5.3添加注解@RefreshScope
@RestController
@RefreshScope//当前类找到某些内容发生变化的时候,会刷新属性,(必须是RefreshScope知道属性发生变化) public class ClientController {
@Value("${spring.aaaa}") private String aaaa;
@GetMapping("/aaa") public String getAaaa() {
return aaaa;
}
}
这时候我们通过Postman发出 POST 请求访问我们的 client 下面的 http://localhost:19245/actuator/refresh 然后我们再回来刷新 controller 页面,发现数据变化为最新的