SpringCloud Config 配置中心
好久没写了,首先依旧是相关资料以及注意事项:
- 工程GitHub
- Config远程仓库地址
- 需要配置Eureka注册中心,方法见SpringBoot-Eureka的配置
- 环境:SpringBoot 2.0.4.RELEASE + SpringCloud Finchley.SR1
简介:
分布式系统中,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件springCloud Config ,它支持从远程Git仓库中读取配置文件并存放到本地Git仓库。接下来我们来看一下服务端和客户端分别应该如何配置。
服务端
一.Maven配置
在Maven中添加eureka-client
,spring-cloud-config-server
<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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
二.开启配置
还是老套路,添加@EnableConfigServer
,@EnableDiscoveryClient
注解来分别开启eureka客户端以及配置中心的服务端。
@SpringBootApplication
@EnableConfigServer
@EnableDiscoveryClient
public class ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class, args);
}
}
三.配置文件
主要就是三个设置
- 设置服务的名称
- 设置远程仓库的地址用户名密码
- 设置注册中心地址
spring:
application:
name: config
cloud:
config:
server:
git:
uri: https://github.com/BzCoder/config-repo
username:
password:
eureka:
instance:
prefer-ip-address: true
client:
service-url:
defaultZone: http://localhost:8761/eureka
四.创建配置文件并访问
我们在远程仓库中创建了三个对应不同环境的配置文件order-dev.yml
,order-test.yml
,order-prod.yml
,假如在不同环境下有很多共用的配置,我们可以再创建一个order.yml
用来存放共同配置,springcloud-config取配置时,会将你的对应环境配置与order.yml
合并后再返回。在远程仓库文件配置完毕后,我们就可以直接访问http://localhost:8080/order-dev.yml
来获取配置信息。当然我们可以更改文件后缀名来修改配置文件的展现方式,如.json,.properites。
配置文件的路径规则:
/{label}/{name}-{profiles}.{type}
- label 分支名称 如:master dev ,不写就是master。
- name 配置文件名称
- profiles 环境名称,不可省略,假如我们的仓库中配置文件命名没有环境名称,可以profile可以写为-a
在启动后我们可以看到日志
Adding property source: file:/C:/Users/Administrator/AppData/Local/Temp/config-repo-9115656602637453229/order-dev.yml
这样就把远程仓库的配置文件保存在本地路径Git了。假如需要设置保存到指定路径的话,可以在配置文件中加入basedir。
server:
git:
uri: https://github.com/BzCoder/config-repo
username:
password:
basedir: D:/Config/basedir
至此服务端就配置完毕了,当然如果你需要保持他高可用性,可以配置ConfigSever集群,只需要配置到不同地址即可。
客户端
一.Maven配置
在Maven中添加eureka-client
,config-server
<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-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-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
二.开启服务发现
@EnableDiscoveryClient
@SpringBootApplication
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
}
三.配置文件
在配置文件上就比较讲究了,我们需要创建一个bootstrap.yml.bootstrap的意思是引导程序,我们需要将Eureka的配置信息写到bootstrap中。这里也提一下配置加载的顺序是:
- bootstrap 2.远程config的配置 3.application
bootstrap.yml文件
spring:
application:
name: client
cloud:
config:
discovery:
enabled: true
service-id: CONFIG
profile: dev
eureka:
instance:
prefer-ip-address: true
client:
service-url:
defaultZone: http://localhost:8762/eureka/
配置文件中name对应配置文件的名称,profile对应环境,service-id对应我们配置中心的服务名称。
四.测试
最后我们写一个测试接口,查看是否能正确的读取配置中心的数据:
@RestController
public class ConfigController {
@Value("${env}")
private String env;
@GetMapping("/env")
public String getEnv()
{
return env;
}
访问成功
到此对于SpringCloud Config的初步学习就到这里了