一.为什么使用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\\ 目录中。
可通过如下方式访问浏览器获取属性:
http://localhost:9999/config-dev.properties |
---|
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的值,就可以根据运行环境获取到对应的配置了。