由于原生的spring-cloud-config
只支持单一的application加载,对多个配置文件加载不够灵活,该项目可以通过添加配置关联,方便配置基于数据库的多个配置文件的加载。当多个配置key重合时,依赖最近的配置优先级最高。进而达到配置覆盖的功能。此外,当配置中心服务器宕机时,提供了从本地加载最新配置的补偿机制,一定程度保证了服务的健壮性。
新建springcloud项目,添加如下依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
配置文件如下:
server.port=8888
spring.profiles.active=jdbc
spring.datasource.hikari.connection-timeout=5000
spring.datasource.hikari.maximum-pool-size=10
spring.cloud.config.server.jdbc.sql= SELECT key_, value_ FROM properties WHERE application_=? and profile_=? and label_=?
#spring.cloud.config.server.jdbc.order=1
spring.datasource.url=jdbc:mysql://localhost:3306/config?useSSL=false&charset=utf8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
mybatis.mapper-locations=mapper/*.xml
其中数据库config在resources路径下的config.sql文件
编写类RelationalJdbcEnvironmentRepository
,重写findOne
方法,该方法就是关联多个配置文件的实现。
启动项目,测试PropertiesController
中的post
方法,可以模拟前端页面,添加、修改配置。
新建springcloud项目,添加如下依赖
<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>
application.properties配置文件如下:
spring.application.name=app-1
spring.cloud.config.label=label2
spring.cloud.config.profile=test
key2=clientvalue1
#key1[0]=key10
#key1[1]=key12
表示,请求加载服务器上名为app-1,label为label2,profile为test的配置,由于服务器上面已经整合了多配置关联,故,客户端也可实现多配置。
启动项目,测试TestController
中的test
方法,可测试,多配置关联,配置覆盖,以及配置服务中心宕机的情况。