在分布式系统中, 由于服务数量巨多, 为了方便服务配置文件统一管理, 实时更新, 所以需要分布式配置中心组件. 在 Spring Cloud 中, 有分布式配置中心组件 spring cloud config , 它支持配置服务放在配置服务的内存中 (即本地), 也支持放在远程 Git 仓库中. 在 spring cloud config 组件中, 分两个角色, 一是 config server, 二是 config client.
1: 新建一个工程, 命名为 config-server, 同意 idea 支持创建该类工程
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">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.springcloud</groupId>
- <artifactId>config-server</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>config-server</name>
- <description>Demo project for Spring Boot</description>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.2.RELEASE</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <java.version>1.8</java.version>
- </properties>
- <dependencies>
- <!--<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>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-eureka</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-config-server</artifactId>
- <!-- <version>1.4.0.RELEASE</version>-->
- </dependency>
- <dependency>
- <groupId>org.eclipse.jgit</groupId>
- <artifactId>org.eclipse.jgit</artifactId>
- <version>4.8.0.201706111038-r</version>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>Camden.SR6</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
- <repositories>
- <repository>
- <id>spring-milestones</id>
- <name>Spring Milestones</name>
- <url>https://repo.spring.io/milestone</url>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
- </repositories>
- </project>
注意, 自动新建完的工程 中的版本可能会比较高, 我们需要手动改成 1.5.2.RELEASE, 这样才能保证下面的操作可用.
启动类加入注解, 如下:
- @SpringBootApplication
- @EnableConfigServer
- public class ConfigServerApplication {
- public static void main(String[] args) {
- SpringApplication.run(ConfigServerApplication.class, args);
- }
- }
修改配置文件, 如下:
- spring.application.name=config-server
- server.port=8888
- # 配置文件在本地
- #spring.profiles.active=native
- # 配置文件的目录
- #spring.cloud.config.server.native.search-locations=D:/workspace/GitHub/spring-config/config-file
- #spring.cloud.config.server.git.uri=https://github.com/forezp/SpringcloudConfig/
- spring.cloud.config.server.git.uri=https://github.com/iot-wangshuyu/springcloud
- # 配置仓库路径
- spring.cloud.config.server.git.searchPaths=SpringcloudConfig/respo/
- # 配置仓库的分支
- spring.cloud.config.label=master
- # 访问 git 仓库的用户名, 仓库为 public 则不用填写
- spring.cloud.config.server.git.username=
- # 访问 git 仓库的用户密码
- spring.cloud.config.server.git.password=
如果想使用 git 仓库就把本地配置注释掉, 如果想使用本地配置, 就把 git 仓库注释掉, 然后再本地对应目录下新建一个 config-client-dev.properties 文件, 内容为:
foo = foo version 2
我使用的是 git 远程仓库.
配置完成后启动程序, 访问 http://localhost:8888/config-client/dev/
返回:
{"name":"config-client","profiles":["dev"],"label":"master","version":"3205652bcac310656b2f00790e7130e7df19a64e","state":null,"propertySources":[{"name":"https://github.com/iot-wangshuyu/springcloud/SpringcloudConfig/respo/config-client-dev.properties","source":{"foo":"foo version 2"}}]}
返回以上结果, 说明配置成功了.
2: 构建 config client
新建一个 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">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.springcloud</groupId>
- <artifactId>config-client</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>config-client</name>
- <description>Demo project for Spring Boot</description>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.2.RELEASE</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <java.version>1.8</java.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-config</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>
- </dependency>
- </dependencies>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>Dalston.RC1</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- <repositories>
- <repository>
- <id>spring-milestones</id>
- <name>Spring Milestones</name>
- <url>https://repo.spring.io/milestone</url>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
- </repositories>
- </project>
配置文件如下:
- # 服务名称
- spring.application.name=config-client
- # 仓库分支
- spring.cloud.config.label=master
- #dev 开发环境配置文件
- #test 测试环境
- #pro 正式环境
- spring.cloud.config.profile=dev
- # 使用 eureka server 的时候需要注释掉
- spring.cloud.config.uri= http://localhost:8888/
在程序中写一个 API 接口, 返回从配置文件中读取的 foo 变量的值, 代码如下:
- @SpringBootApplication
- @RestController
- public class ConfigClientApplication {
- public static void main(String[] args) {
- SpringApplication.run(ConfigClientApplication.class, args);
- }
- @Value("${foo}")
- String foo;
- @RequestMapping(value = "/hi")
- public String hi(){
- return foo;
- }
- }
在浏览器中访问: http://localhost:8881/hi
返回:
foo version 2
说明, config-client 从 config-server 获取了 foo 的属性, 而 config-server 是从 git 仓库读取的, 如图:
来源: https://blog.csdn.net/wang_shuyu/article/details/78690266?from=singlemessage