【Config】01-Config与SpringCloud
Config与SpringCloud
简介
为什么要使用配置中心:
在微服务项目中,所写的项目有很多,需要写的配置文件也会很多。就会遇到如下问题:
- 如果重新修改配置文件,就需要对项目进行重新编译、打包、上传、重新启动…
- 如果多个服务配置了相同的数据库,而此时更换了数据库之后,我们需要修改这几个项目的配置文件
- 很多情况下、配置文件的配置信息是相同的,但我们需要给每个不同的项目都编写该配置
作用:
- 集中管理配置文件
- 不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
- 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉去培植自己的信息。
- 当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置
- 将配置信息以REST接口的形式包暴露
使用
在github中创建配置项目
配置
github
或gitee
。我这里使用gitee新建项目repository
新建目录及文件
添加配置信息
config-server端配置
编码
项目结构
…咋忘记截图了呢。。。一定是太认真忘记了
pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>application.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18server:
port: 7051
spring:
application:
name: cloud-config
cloud:
config:
server:
git:
uri: https://gitee.com/zsqbigbig/springcloud-config-gitee.git
search-paths:
- springcloud-config-gitee
label: master
# http://localhost:7051/master/springcloud-config-gitee-dev.yml
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eurekaConfigMain7051.java
1
2
3
4
5
6
7
8
9
10
11
12/**
* 1. 启动Spring Cloud Config: @EnableConfigServer
*/
public class ConfigMain7051 {
public static void main(String[] args) {
SpringApplication.run(ConfigMain7051.class);
}
}
访问配置文件
规则 | 示例 |
---|---|
/{label}/{application}-{profile}.yml | http://localhost:7051/master/springcloud-config-gitee-dev.yml |
/{application}-{profile}.yml | http://localhost:7051/springcloud-config-gitee-dev.yml |
/{application}-{profile}[/{label}].yml | http://localhost:7051/springcloud-config-gitee-dev/master.yml |
- label: 分支名称
- application: 配置文件名称重复部分
- profile: 配置文件名称剩余部分(可以是环境名称)
http://localhost:7051/master/springcloud-config-gitee-dev.yml
访问结果如下
config-client端配置
- 配置当前服务链接config-server,使用远程配置文件
- 当配置文件修改时,使当前
config-client
服务的值也会修改
编码
项目结构
pom.xml
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<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!--要启用bootstrap.yml,必须加此依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</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-web</artifactId>
</dependency>
<!--当配置文件修改,需要通过改依赖的接口通知客户端-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.8</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>bootstrap.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25server:
port: 7061
spring:
application:
name: cloud-config-client
cloud:
config:
label: master # 分支名称
name: springcloud-config-gitee # 文件名称
profile: dev # 环境名称
uri: http://localhost:7051 # config server 的url
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
# 需要调用actuator依赖下的接口,通知config client 配置文件已修改
# curl -X POST "http://localhost:7061/actuator/refresh"
management:
endpoints:
web:
exposure:
include: "*"ConfigClientMain7061.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/**
* 1. 添加依赖:spring-boot-starter-actuator
* 2. 启动刷新配置:@RefreshScope
* 3. 开启actuator的配置文件
*/
public class ConfigClientMain7061 {
public static void main(String[] args) {
SpringApplication.run(ConfigClientMain7061.class);
}
}ConfigController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class ConfigController {
private String nickname;
private Integer age;
public String config() {
JSONObject jsonObject = new JSONObject();
jsonObject.set("nickname", nickname);
jsonObject.set("age", age);
log.info("{}", jsonObject);
return jsonObject.toString();
}
}
使用
http://localhost:7061/config/user
修改配置文件信息
访问配置信息
localhost:7051/master/springcloud-config-gitee-dev.yml
:访问
config-client
的localhost:7061/config/user
接口:此时访问的数据接并未发生改变,配置未刷新。
刷新
config-client
所获取的配置文件信息的两种方式重启
config-server
服务curl -X POST "http://localhost:7061/actuator/refresh"
总结
跟Nacos、Apollo相比。。这个是真不好用。
能用别的,就不要用这个。
凭感觉总结一下吧:
优点:
- 不需要安装。其他俩安装一个比一个麻烦
- config-server服务不怎么占用内存。nacos太占内存了,Apollo不清楚
缺点:
- 没有现成的后台页面。Nacos、Apollo后台页面都很人性化的
- 实际开发很不好用,还得手动刷新配置。这要是忘了刷新配置了,直接GG
-------------本文结束感谢您的阅读-------------
相关文章