springcloud config demo
服务端搭建
新建远程git仓库,保存配置,并将仓库拉到本地,以后更新配置可在本地更新,在push到远程仓库
新建3355配置中心模块
添加依赖:
<!--config server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
主启动开启配置:
@SpringBootApplication
@EnableConfigServer
public class ConfigServer {
public static void main(String[] args) {
SpringApplication.run(Configuration.class,args);
}
}
yaml配置文件:
server:
port: 3355
spring:
application:
name: cloud-config-center
cloud:
config:
server:
git:
#uri: #Github上的git仓库名字
uri: https://gitee.com/kevin_cai_ren/springcloud-config.git
##搜索目录.这个目录指的是github上的目录
search-paths:
- springcloud-config
username: XXXXXX@qq.com
password: XXXXXX
##读取分支
label: master
eureka:
client:
service-url:
defaultZone: http://eureka7779.com:7779/eureka/
启动服务拉取配置
客户端搭建
引入依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
修改配置文件,注意,这里使用的是bootstrap.yml,原因是bootstrap是系统级配置文件,优先级高于application.yml
server:
port: 3366
spring:
application:
name: config-client
cloud:
#Config客户端配置
config:
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上诉3个综合就是 master分支上 config-dev.yml
uri: http://config-3355.com:3355 # 配置中心地址
eureka:
client:
service-url:
defaultZone: http://eureka7779.com:7779/eureka/
主启动:
@EnableEurekaClient
@SpringBootApplication
public class ConfigClient {
public static void main(String[] args) {
SpringApplication.run(ConfigClient.class,args);
}
}
@Value注解读取配置
@RestController
public class TestController {
@Value("${config.info: test}")//读远程配置,:后边是默认值
private String info;
@RequestMapping("/get")
public Object get(){
return info;
}
}
测试:
但是存在一个问题,如果我修改了远程配置仓库的配置,发现客户端读取的到配置并没有立马更新,得重启一次才行。
解决:
采取动态刷新
引入监控依赖:
<!--监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
修改yml暴露监控端点:
#暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
在读取配置的类上新增注解@RefreshScope
@RestController
@RefreshScope
public class TestController {
@Value("${config.info: test}")//读远程配置,:后边是默认值
private String info;
@RequestMapping("/get")
public Object get(){
return info;
}
}
ok,这样就实现了动态刷新,需要两个步骤:
- git修改配置
- 发送一个post请求,请求地址:http://localhost:3366/actuator/refresh
这样就可以是实现半自动更细hhh