spring cloud config 用svn做配置文件仓库
spring cloud的配置文件中心分为服务端和客户端,下面是一个基于svn实现配置中心的例子:
一:服务端主要配置
1,创建一个spring boot项目,修改pom.xml,添加jar包依赖,代码如下:
<?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.qwrt.fire.config.server</groupId>
<artifactId>fire-config-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>fire-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.6.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>
<!--引入web包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入配置中心的包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
<version>1.3.2.RELEASE</version>
</dependency>
<!--使用svn做配置文件的版本管理,需要多引入svnkitr包-->
<dependency>
<groupId>org.tmatesoft.svnkit</groupId>
<artifactId>svnkit</artifactId>
<version>1.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2,启动类添加注解
给启动类添加注解,代码如下:
package com.qwrt.fire.config.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class FireConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(FireConfigServerApplication.class, args);
}
}
3,配置文件
修改application.yml,进行配置svn,代码如下:
server:
port: 9091 #应用程序端口
spring:
application:
name: fire-config-server #应用程序名
cloud:
config:
server:
svn:
uri: xxxxx #svn地址
username: xxxxx #svn用户名
password: xxxxx #svn密码
default-label: config-repo #trunk,配置文件的目录
profiles:
active: subversion #表示这是采用的svn进行的spring cloud的配置
上面的uri是svn的一个路径,在svn的目录下创建一个文件夹,存放配置文件。
4,测试
启动spring boot的配置中心,输入http://localhost:9091/application/profile/label,进行访问
二:客户端
1,修改客户端的pom.xml
添加下面两个依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--spring cloud配置中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
2,配置文件
需要配置两个配置文件,application.yml和bootstrap.yml。其中application.yml是客户端的个性化配置文件,bootstrap.yml是连接配置中心的配置,bootstrap.yml文件会在application.yml之前进行加载。
bootstrap.yml代码如下:
spring:
cloud:
config:
name: fire-sensor #对应{application}部分
profile: dev #对应{profile}部分
uri: http://localhost:9091/ #配置中心的具体地址
label: config-repo #对应版本的分支。如果配置中心使用的是本地存储,则该参数无用
3,测试
可以写一个controller进行测试,此处略。。。。
总结:上面是spring cloud基于svn的配置中心实现的一个简单的步骤,不太重要的地方就省略了,如果觉得太简单抽象了,下面推荐一些参考的博客,有详细的实现说明,可以进行参考,还有对配置文件更新不需要重启项目加载配置文件的方法:
http://www.cnblogs.com/ityouknow/p/6906917.html
http://www.jianshu.com/p/167afb5447d4
http://blog.csdn.net/chenhuaping007/article/details/55253903
http://www.ityouknow.com/springcloud/2017/05/22/springcloud-config-git.html
当然也可以使用git作为配置文件仓库的管理,和svn实现的步骤差不多,具体的也可以参考上面的博客,网上还有很多资料,这里就不费力气再写一篇关于git作为spring cloud配置中心的使用步骤了。
我在参考上面的博客的时候遇到一些问题:
1,默认是到svn的trunk或者branch目录下查找配置文件的,但是我的配置文件不是放在这两个目录下,所以需要配置的svn的uri路径需要指定到存放spring cloud配置文件的上级目录
2,在配置svn的“default-label: xxx”属性的时候,网上的资料时说配置trunk或者branch,其实是配置的存放spring cloud配置文件的目录名。
3,没有深刻理解理解spring cloud访问配置文件的http请求的路径含义,正确的是这样的http://localhost:9091/fire-sensor/dev/config-repo,解释:http://ip:端口/application/profile/label
application就是配置文件的名称,profile标志是开发版,测试版,还是生产版,label表示的是存放配置文件的文件夹名。比如:
仓库中的配置文件会被转换成web接口,访问可以参照以下的规则:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties