八.Config分布式配置中心
1.知识点
2.在GitHub创建新的repository
使用GitHub桌面版创建 ,具体可以参考我的另一篇文章点击这里或者访问链接
https://blog.csdn.net/qq_41015977/article/details/101213960
3.构建项目(服务端3344)
①创建module
②编写pom文件
<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>com.hry.springcloud
</groupId>
<artifactId>cloud-api-commons
</artifactId>
<version>${project.version}
</version>
</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>org.springframework.boot
</groupId>
<artifactId>spring-boot-devtools
</artifactId>
<scope>runtime
</scope>
<optional>true
</optional>
</dependency>
<dependency>
<groupId>org.projectlombok
</groupId>
<artifactId>lombok
</artifactId>
<optional>true
</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-test
</artifactId>
<scope>test
</scope>
</dependency>
</dependencies>
③修改yml文件
server:
port: 3344
spring:
application:
name: cloud
-config
-center
cloud:
config:
server:
git:
uri: https
://github.com/xxx/springcloud
-config
search-paths:
- springcloud
-config
default-label: master
username: xxx写自己的github用户名
password: xxx写自己的github密码
eureka:
client:
service-url:
defaultZone: http
://localhost
:7001/eureka
④创建主启动类
package com
.hry
.springcloud
;
import org
.springframework
.boot
.SpringApplication
;
import org
.springframework
.boot
.autoconfigure
.SpringBootApplication
;
import org
.springframework
.cloud
.config
.server
.EnableConfigServer
;
@SpringBootApplication
@EnableConfigServer
public class ConfigCenterMain3344 {
public static void main(String
[] args
) {
SpringApplication
.run(ConfigCenterMain3344
.class, args
);
}
}
⑤修改hosts文件
添加
127.0.0.1 config
-3344.com
然后保存 之前演示过,在初级篇–学习笔记3–5.搭建集群环境–③编写yml文件中
⑥Push一个yml
config:
info: master branch
,springcloud
-config/config
-dev.yml version=1
Commit to master 然后Push 刷新
⑦测试
访问后可以看到我们在yml中写的配置 这里读取的是master分支的config-dev.yml,还可以有多个yml配置读取 此外还可以读取其他分支的yml 只需要修改default-label即可切换要访问的分支。
4.构建项目(客户端3355)
①创建module
②编写pom文件
<dependencies>
<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>
<dependency>
<groupId>com.hry.springcloud
</groupId>
<artifactId>cloud-api-commons
</artifactId>
<version>${project.version}
</version>
</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>org.springframework.boot
</groupId>
<artifactId>spring-boot-devtools
</artifactId>
<scope>runtime
</scope>
<optional>true
</optional>
</dependency>
<dependency>
<groupId>org.projectlombok
</groupId>
<artifactId>lombok
</artifactId>
<optional>true
</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-test
</artifactId>
<scope>test
</scope>
</dependency>
</dependencies>
③修改yml文件
server:
port: 3355
spring:
application:
name: config
-client
cloud:
config:
label: master
name: config
profile: dev
uri: http
://localhost
:3344
eureka:
client:
service-url:
defaultZone: http
://localhost
:7001/eureka
④创建主启动类
package com
.hry
.springcloud
;
import org
.springframework
.boot
.SpringApplication
;
import org
.springframework
.boot
.autoconfigure
.SpringBootApplication
;
import org
.springframework
.cloud
.netflix
.eureka
.EnableEurekaClient
;
@SpringBootApplication
@EnableEurekaClient
public class ConfigClientMain3355 {
public static void main(String
[] args
) {
SpringApplication
.run(ConfigClientMain3355
.class, args
);
}
}
⑤业务代码
controller
package com
.hry
.springcloud
.controller
;
import org
.springframework
.beans
.factory
.annotation
.Value
;
import org
.springframework
.web
.bind
.annotation
.GetMapping
;
import org
.springframework
.web
.bind
.annotation
.RestController
;
@RestController
public class ConfigClientController {
@Value("config.info")
private String configInfo
;
@GetMapping("/configInfo")
public String
getConfigInfo(){
return configInfo
;
}
}
⑥测试
启动3355 成功实现了客户端3355访问SpringCloud Config3344通过GitHub获取配置信息
⑦存在的问题
现在修改GitHub上的版本号为2,然后提交当前分支 然后刷新3344,3344立即更新 刷新3355,3355还是1没变 虽然可以通过重启3355来解决此问题,但明显不是明智的选择。如果使用集群有几十几百个3355这样的客户端都重启那不就都闲着没事干摸鱼了。
5.动态刷新
①确定3355的pom文件有actuator坐标
②修改3355yml文件
在bootstrap.xml添加配置
management:
endpoints:
web:
exposure:
include: "*"
③修改controller
在controller类上添加注解
@RefreshScope
④测试
GitHub修改版本号为3并提交 刷新3344正常 而刷新3355没反应啊还是2 此时是因为这个得手动刷新(掀桌(╯‵□′)╯︵┻━┻) 打开cmd使用curl发送个POST
curl
-X POST
"http://localhost:3355/actuator/refresh"
然后刷新浏览器就可以了 难道不能自动刷新吗?当然可以,后面等你。