博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Cloud Config采用数据库存储配置内容【Edgware+】
阅读量:5921 次
发布时间:2019-06-19

本文共 5175 字,大约阅读时间需要 17 分钟。

hot3.png

在之前的一文中,我们介绍的Spring Cloud Server配置中心采用了Git的方式进行配置信息存储。这一设计巧妙的利用Git自身机制以及其他具有丰富功能的Git服务端产品,让Spring Cloud Server在配置存储和管理的上避开了很多与管理相关的复杂实现,使其具备了配置中心存储配置和读取配置的基本能力;而更上层的管理机制,由于不具备普遍适用性,所以Spring Cloud Server并没有自己去实现这部分内容,而是通过Git服务端产品来提供一部分实现,如果还需要更复杂的功能也能自己实现与定义。即便如此,对于Spring Cloud Server默认使用Git来存储配置的方案一直以来还是饱受争议。所以,本文将介绍一下Spring Cloud Config从Edgware版本开始新增的一种配置方式:采用数据库存储配置信息。

构建配置中心服务端

第一步:创建一个基础的Spring Boot项目,在pom.xml中引入几个主要依赖:

  • spring-cloud-config-server:配置中心的基础依赖
  • spring-boot-starter-jdbc:由于需要访问数据库,所以需要加载jdbc的依赖
  • mysql-connector-java:MySQL数据库的连接包
  • flyway-core:该内容非强制,主要用来管理schema(如果您不了解可以看一下)
org.springframework.boot
spring-boot-starter-parent
1.5.11.RELEASE
org.springframework.cloud
spring-cloud-config-server
org.springframework.boot
spring-boot-starter-jdbc
org.flywaydb
flyway-core
5.0.3
mysql
mysql-connector-java
5.1.21
org.springframework.cloud
spring-cloud-dependencies
Edgware.SR3
pom
import

第二步:准备schema创建文件。在resources下创建schema目录,并加入V1__Base_version.sql文件,具体内容如下:

CREATE TABLE `properties` (  `id` int(11) NOT NULL,  `key` varchar(50) NOT NULL,  `value` varchar(500) NOT NULL,  `application` varchar(50) NOT NULL,  `profile` varchar(50) NOT NULL,  `label` varchar(50) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

该脚本会在程序运行时由flyway自动执行

第三步:创建应用主类,具体如下:

@EnableConfigServer@SpringBootApplicationpublic class ConfigServerBootstrap {    public static void main(String[] args) {        ApplicationContext context = SpringApplication.run(ConfigServerBootstrap.class);        // 测试用数据,仅用于本文测试使用        JdbcTemplate jdbcTemplate = context.getBean(JdbcTemplate.class);        jdbcTemplate.execute("delete from properties");        jdbcTemplate.execute("INSERT INTO properties VALUES(1, 'com.didispace.message', 'test-stage-master', 'config-client', 'stage', 'master')");        jdbcTemplate.execute("INSERT INTO properties VALUES(2, 'com.didispace.message', 'test-online-master', 'config-client', 'online', 'master')");        jdbcTemplate.execute("INSERT INTO properties VALUES(3, 'com.didispace.message', 'test-online-develop', 'config-client', 'online', 'develop')");        jdbcTemplate.execute("INSERT INTO properties VALUES(4, 'com.didispace.message', 'hello-online-master', 'hello-service', 'online', 'master')");        jdbcTemplate.execute("INSERT INTO properties VALUES(5, 'com.didispace.message', 'hello-online-develop', 'hello-service', 'online', 'develop')");    }}

这里增加了一些测试用数据,以便于后续的配置读取验证。

第四步:配置application.properties,具体内容如下:

spring.application.name=config-server-dbserver.port=10020spring.profiles.active=jdbcspring.cloud.config.server.jdbc.sql=SELECT `KEY`, `VALUE` from PROPERTIES where APPLICATION=? and PROFILE=? and LABEL=?spring.datasource.url=jdbc:mysql://localhost:3306/config-server-dbspring.datasource.username=rootspring.datasource.password=spring.datasource.driver-class-name=com.mysql.jdbc.Driverflyway.locations=/schema

这里主要涉及几个配置:

  • spring.profiles.active=jdbc:必须设置,将配置中心的存储实现切换到jdbc的方式
  • spring.cloud.config.server.jdbc.sql:非必须,这里由于采用mysql数据源,keyvalue是保留关键词,原生的实现语句会报错,所以需要重写一下这句查询语句(如果存储的表结构设计不同于上面准备的内容,也可以通过这个属性的配置来修改配置的获取逻辑)
  • spring.datasource.*:存储配置信息的数据源配置,这里采用mysql,开发者根据自己实际情况修改
  • flyway.locations:flyway加载schema创建sql的位置

服务端配置验证

完成了上一节内容之后,我们就已经构建一个通过数据酷来存储配置内容的配置中心了,下面我们可以通过配置中心暴露的端点来尝试读取配置。

第一步:先将上面构建的配置中心启动起来。

第二步:验证配置信息获取:

  • curl http://localhost:10020/config-client/stage/,获取信息config-client服务stage环境的配置内容,根据上面的数据准备,我们会获得如下返回内容:
{    "name": "config-client",    "profiles": [    "stage"    ],    "label": null,    "version": null,    "state": null,    "propertySources": [        {            "name": "config-client-stage",            "source": {            "com.didispace.message": "test-stage-master"            }        }    ]}
  • curl http://localhost:10020/hello-service/stage/develop,获取信息hello-service服务,stage环境,develop标签的配置内容,根据上面的数据准备,我们会获得如下返回内容:
{    "name": "hello-service",    "profiles": [        "online"    ],    "label": "develop",    "version": null,    "state": null,    "propertySources": [        {            "name": "hello-service-online",            "source": {                "com.didispace.message": "hello-online-develop"            }        }    ]}

关于如何访问Spring Cloud Config构建配置中心获取配置信息的详细内容 ,可以查看前文:,本文不做详细介绍。

总结

本文主要具体介绍了在Spring Cloud Config在Edgware版本开始新增的JDBC存储的使用思路,具体使用实际上还有很多可以优化的空间,比如:索引的优化、查询语句的优化;如果还需要进一步定制管理,对于表结构的优化也是很有必要的。

最后,安利一个基于Spring Cloud Config的配置管理项目:,正在紧锣密鼓的开发中,尽情期待!

本文示例

读者可以根据喜好选择下面的两个仓库中查看config-server-dbconfig-client两个项目:

如果您对这些感兴趣,欢迎star、follow、收藏、转发给予支持!

转载于:https://my.oschina.net/didispace/blog/1831121

你可能感兴趣的文章
poj - 1860 Currency Exchange
查看>>
【JS学习】慕课网8-17编程练习 网页的返回与跳转
查看>>
chgrp命令
查看>>
Java集合框架GS Collections具体解释
查看>>
为什么要在下班后努力学习?你不知道的秘密...... ...
查看>>
洛谷 P2486 BZOJ 2243 [SDOI2011]染色
查看>>
Spring Cloud 2.x系列之整合rocketMQ
查看>>
答疑解惑:Linux与Windows的那些事儿(2)
查看>>
Java的Socket网络编程以及多线程
查看>>
百万连接之路
查看>>
关于传输自环导致中兴2826交换机无法网管的故障案例
查看>>
Fsutil文件的具体用法
查看>>
linux 笔记本的温度提示
查看>>
【转载】nginx反向代理(proxy_pass)tomcat的过程中,session失效的问题解决
查看>>
项目管理实践教程
查看>>
(转)DOTA新版地图6.78发布:大幅改动 增两位新英雄
查看>>
合成模式
查看>>
Primefaces框架开发杂谈!
查看>>
《scp 备份站点 笔记》连带邮件提醒
查看>>
Solaris 10u11 安装python2.7.10
查看>>