一.为什么使用spring-cloud-config
在springboot项目中,配置文件通常是放在项目中的application.properties或者application.yml中,如果有多个项目,就有多个配置文件,在分布式项目中,有时需要对配置进行集中管理,公司目前使用的是zookeeper,缺点是更新配置后需要重启项目才能获取最新的配置,而且没有版本记录。而spring-cloud-config解决了这个问题,可以将配置文件在git或者svn中集中管理,便于修改和版本控制,并且可以实现更新git中的配置后及时更新到项目中。
二.快速入门
spring-cloud-config由两部分组成,config-server和config-client。config-server用于从git或者svn中获取配置,是提供配置的服务;config-client就是从config-server中获取配置。
1.首先创建一个config-server工程,完整的依赖如下:
<?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.lx.springCloudLeran</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.8.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.7</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<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>
<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>
在入口类上加上@EnableConfigServer,表示这是一个config-server。
在git中新建一个工程,用于存放配置文件。在工程的根目录创建一个文件夹,我的文件夹名称是myconfig,文件夹中有个文件叫做config-dev.properties,这里可以根据运行环境创建多个文件。文件内容如下图:
在config-server工程的配置文件中,作如下配置:
server.port=9999
#git仓库地址
spring.cloud.config.server.git.uri=git地址
#git登录帐号
spring.cloud.config.server.git.username=xxxx
#git登录密码
spring.cloud.config.server.git.password=xxxxxx
#仓库中的相对地址,即文件夹,不可缺省。多个文件夹用逗号隔开,可以使用*表示git下所有路径
spring.cloud.config.server.git.searchPaths=myconfig
#git分支
spring.cloud.config.label=master
#clone下来的配置文件保存在本地的位置,文件夹不存在会自动创建。连不上git时会使用这里的配置
spring.cloud.config.server.git.basedir=E:\\111\\
此时运行config-server项目,就会获取到git仓库中的配置,并且保存在设定的 E:\111\ 目录中。
可通过如下方式访问浏览器获取属性:
<br>http://localhost:9999/config-dev.properties<br><br>http://localhost:9999/config/dev/<br><br>http://localhost:9999/config/dev/master<br>
2. 创建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.lx.springCloudLearn</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.8.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.7</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>
</dependencies>
<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>
<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>
创建一个controller用于测试,使用@Value注入git中配置的属性:
然后在配置文件中配置如下,注意,config-client中的配置文件名称必须是bootstrap.properties:
spring.application.name=config-client
server.port=8881
#配置文件名称,即 "-" 之前的
spring.cloud.config.name=config
#配置文件profile,即"-"之后的
spring.profiles.active=dev
#config-server地址
spring.cloud.config.uri=http://localhost:9999/
#配置文件所在分支
spring.cloud.config.label=master
#配置缓存目录,避免配置丢失.如下的配置会将配置文件缓存在当前工程目录的config-repo文件夹,没有则自动新建
spring.cloud.config.server.git.basedir=config-repo
3.验证。
此时,开启config-server和config-client工程,访问localhost:8881/test , 读取到了git中的配置:
通过在git中配置不同环境下的配置文件,如application-dev.properties,application-prod.properties,来配置开发环境/生产环境下的参数,并且在需要使用配置的工程中,也就相当于文中的config-client,指定
spring.profiles.active的值,就可以根据运行环境获取到对应的配置了。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/a561066292/article/details/81357754
内容来源于网络,如有侵权,请联系作者删除!