代码地址: github-spring-cloud地址
Config(分布式配置中心)简介
Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。
创建服务端ConfigServer
config-server pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>spring-cloud-learn</artifactId>
<groupId>com.sl.learn.cloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.sl.learn.cloud</groupId>
<artifactId>config-server</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<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>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
</project>
在程序的入口Application类加上@EnableConfigServer注解开启配置服务器的功能,代码如下:
@SpringBootApplication
@EnableConfigServer
@EnableDiscoveryClient
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class,args);
}
}
配置文件application.properties文件配置以下
spring.application.name=config-server
server.port=8088
eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka/
spring.cloud.config.server.git.uri=https://github.com/FadeHub/SpringCloudConfig
spring.cloud.config.server.git.searchPaths=repo
spring.cloud.config.label=master
spring.cloud.config.username=
spring.cloud.config.password=
配置文件含义:
- spring.cloud.config.server.git.uri:配置git仓库地址
- spring.cloud.config.server.git.searchPaths:配置仓库路径
- spring.cloud.config.label:配置仓库的分支
- spring.cloud.config.server.git.username:访问git仓库的用户名
- spring.cloud.config.server.git.password:访问git仓库的用户密码
- eureka.client.serviceUrl.defaultZone:eureka地址
如果Git仓库为公开仓库,可以不填写用户名和密码,如果是私有仓库需要填写,本例子是公开仓库,放心使用。
远程仓库https://github.com/FadeHub/SpringCloudConfig中有个文件config-client-dev.properties文件中有一个属性:
helloConfig=123
eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka/
启动config-server访问链接:http://localhost:8088/helloConfig/dev
{“name”:“helloConfig”,“profiles”:[“dev”],“label”:null,“version”:“8138503a27a470d687d608b0fd4b7d169a23de5c”,“state”:null,“propertySources”:[]}
扫描二维码关注公众号,回复: 9855998 查看本文章
由此可见配置服务中心可以从远程程序获取配置信息
http请求地址和资源文件映射如下:
- /{application}/{profile}[/{label}]
- /{application}-{profile}.yml
- /{label}/{application}-{profile}.yml
- /{application}-{profile}.properties
- /{label}/{application}-{profile}.properties
创建客户端config-client
config-client pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>spring-cloud-learn</artifactId>
<groupId>com.sl.learn.cloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.sl.learn.cloud</groupId>
<artifactId>config-client</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<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>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
</dependencies>
</project>
配置文件bootstrap.properties
spring.application.name=config-client
spring.cloud.config.label=master
spring.cloud.config.profile=dev
spring.cloud.config.uri=http://localhost:8088/
server.port=8098
配置文件含义解释:
-
spring.cloud.config.label: 指明远程仓库的分支
-
spring.cloud.config.profile:dev/test/pro
dev开发环境配置文件
test测试环境
pro正式环境 -
spring.cloud.config.uri= http://localhost:8888/ (指明配置服务中心的网址)
启动程序ConfigClientApplication
写一个API接口“/hi”,返回从配置中心读取的helloConfig变量的值
@SpringBootApplication
@RestController
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class,args);
}
@Value("${helloConfig}")
private String helloConfig;
@RequestMapping(value = "/hi")
public String helloConfig() {
return helloConfig;
}
}
启动config-client访问链接:http://localhost:8098/hi
这就说明,config-client从config-server获取了helloConfig的属性,而config-server是从git仓库读取的,如图: