spring cloud config作为spring cloud全家桶中的一员,使用率并不高,但是在一定场景下还是很好用的。废话不多说,多说无益,我也不会。
spring cloud config需要两端,一个是保存配置的服务简称server端,一个是消费配置的服务简称client端。
首先我们从server端开始配置 ;
- server配置
首先创建一个spring cloud项目,我已经创建好了,名字叫spring_cloud_config_server
mvn配置如下:
<?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.syb.cloud.config</groupId>
<artifactId>spring_cloud_config_server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring_cloud_config_server</name>
<description>spring cloud config server</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.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>
<spring-cloud.version>Finchley.BUILD-SNAPSHOT</spring-cloud.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>
<!--jdbc资源库配置-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</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>
</project>
注意spring cloud与spring boot版本的对应,不然会出现未知错误或则连编译都过不去,具体对应请自行百度。
下面进行代码相关的配置:
首先是启动类;
启动类上需要添加@EnableConfigServer注解,标识该项目为config server端,至于其他地方与原先保持一致。
接下来是配置文件:
我的配值文件分两种,主要是根据配置数据来源的不同选用不同配置文件;
首先的是使用git的方法:
先给看配置文件
至于说为什么用户名和密码为*号的,我就不用说了,就是不想让你看而已,就这么简单
在git仓库添加配置文件
配置文件中的内容
之后这个server端就算配置完成了。
config让人很舒服的地方就是不仅可以使用git,还可以svn等版本控制工具,当然了还有jdbc,也就是数据库;当然了本地的文本文件也可以。
接下来使用jdbc配置:
上面maven配置中的jdbc配置就是为这个准备,如果不使用数据库的话,可以将这个依赖删除;
上配置:
这个配置大致与git配置相同,只是这个少了git的配置,变为了数据库的配置;
上面spring.cloud.config.server.jdbc=true这个配置是必须的,不然启动会报错找不到git地址;
自定义sql的spring.cloud.config.server.jdbc.sql的配置,我写的sql其实就是config默认配置,所以你懂了,你的数据库要有这几个字段,当然你可以自定义一个查询的sql,这个完全取决于你自己。
上数据库:
这时就看出来上面spring.cloud.config.label这个配置的用途了吧,就是一个查询字段,其他的没什么用,你也完全不可以, 但是你需要修改自定义sql。
这时启动项目,选用jdbc配置,那么你的配置数据就从数据库中读取了。
2.接下来就是client端的配置
首先创建springboot的项目,上maven
<?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.syb.cloud.config</groupId>
<artifactId>spring_cloud_config_client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring_cloud_config_client</name>
<description>spring cloud config client demo</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.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>
<spring-cloud.version>Finchley.BUILD-SNAPSHOT</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</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>${spring-cloud.version}</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-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<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-cloud-starter-config。
接下来就是主要的配置文件了:
注意:springclient中的配置文件需要使用bootstrap.properties,我在之前测试的时候也使用了application.properties也能启动,后来不知为何不能使用了。可能与我选用配置文件有关,具体原因不详。正常的springboot的配置文件加载顺序也是bootstrap.properties优先于application.properties的。
上配置文件:
上面关于从server端的获取的配置的主配置就不用详解了,我感觉注释就已经说的很明白了,主要说一下快速失败的配置;
快速失败的意思就是如果没有成功获取配置则项目就会启动报错,使用依情况而定吧。
这个快速失败的注释还是很清楚的,需要说明的就是回退相关的参数:
初始回退时间,意思就是首次尝试再连接与第一次连接的间隔时间;
最大回退时间,意思是两次连接的最大间隔时间;
回退指数乘数,比如第一次回退是100,那么第二次回退就是120,之后就是120*1.2,就是这么一个意思,最大不会超过最大回退时间。