热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringCloudConfig采用数据库存储配置内容【Edgware+】

在之前的《SpringCloud构建微服务架构:分布式配置中心》一文中,我们介绍的SpringCloudServer配置中心采用了Git的方式进行配置信

在之前的《Spring Cloud构建微服务架构:分布式配置中心》一文中,我们介绍的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(如果您不了解可以看一下这篇文章)

<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>1.5.11.RELEASEversion>
<relativePath/>
parent>

<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-config-serverartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jdbcartifactId>
dependency>
<dependency>
<groupId>org.flywaydbgroupId>
<artifactId>flyway-coreartifactId>
<version>5.0.3version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.21version>
dependency>
dependencies>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>Edgware.SR3version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>


第二步&#xff1a;准备schema创建文件。在resources下创建schema目录&#xff0c;并加入V1__Base_version.sql文件&#xff0c;具体内容如下&#xff1a;


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



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


第三步&#xff1a;创建应用主类&#xff0c;具体如下&#xff1a;


&#64;EnableConfigServer
&#64;SpringBootApplication
public class ConfigServerBootstrap {

public static void main(String[] args) {
ApplicationContext context &#61; SpringApplication.run(ConfigServerBootstrap.class);

// 测试用数据&#xff0c;仅用于本文测试使用
JdbcTemplate jdbcTemplate &#61; context.getBean(JdbcTemplate.class);
jdbcTemplate.execute("delete from properties");
jdbcTemplate.execute("INSERT INTO properties VALUES(1, &#39;com.didispace.message&#39;, &#39;test-stage-master&#39;, &#39;config-client&#39;, &#39;stage&#39;, &#39;master&#39;)");
jdbcTemplate.execute("INSERT INTO properties VALUES(2, &#39;com.didispace.message&#39;, &#39;test-online-master&#39;, &#39;config-client&#39;, &#39;online&#39;, &#39;master&#39;)");
jdbcTemplate.execute("INSERT INTO properties VALUES(3, &#39;com.didispace.message&#39;, &#39;test-online-develop&#39;, &#39;config-client&#39;, &#39;online&#39;, &#39;develop&#39;)");
jdbcTemplate.execute("INSERT INTO properties VALUES(4, &#39;com.didispace.message&#39;, &#39;hello-online-master&#39;, &#39;hello-service&#39;, &#39;online&#39;, &#39;master&#39;)");
jdbcTemplate.execute("INSERT INTO properties VALUES(5, &#39;com.didispace.message&#39;, &#39;hello-online-develop&#39;, &#39;hello-service&#39;, &#39;online&#39;, &#39;develop&#39;)");
}

}



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


第四步&#xff1a;配置application.properties&#xff0c;具体内容如下&#xff1a;


spring.application.name&#61;config-server-db
server.port&#61;10020

spring.profiles.active&#61;jdbc

spring.cloud.config.server.jdbc.sql&#61;SELECT &#96;KEY&#96;, &#96;VALUE&#96; from PROPERTIES where APPLICATION&#61;? and PROFILE&#61;? and LABEL&#61;?

spring.datasource.url&#61;jdbc:mysql://localhost:3306/config-server-db
spring.datasource.username&#61;root
spring.datasource.password&#61;
spring.datasource.driver-class-name&#61;com.mysql.jdbc.Driver

flyway.locations&#61;/schema


这里主要涉及几个配置&#xff1a;


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

服务端配置验证

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

第一步&#xff1a;先将上面构建的配置中心启动起来。

第二步&#xff1a;验证配置信息获取&#xff1a;


  • curl http://localhost:10020/config-client/stage/&#xff0c;获取信息config-client服务stage环境的配置内容&#xff0c;根据上面的数据准备&#xff0c;我们会获得如下返回内容&#xff1a;

{
"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&#xff0c;获取信息hello-service服务&#xff0c;stage环境&#xff0c;develop标签的配置内容&#xff0c;根据上面的数据准备&#xff0c;我们会获得如下返回内容&#xff1a;

{
"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构建配置中心获取配置信息的详细内容
&#xff0c;可以查看前文&#xff1a;《Spring Cloud构建微服务架构&#xff1a;分布式配置中心》&#xff0c;本文不做详细介绍。


总结

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

最后&#xff0c;安利一个基于Spring Cloud Config的配置管理项目&#xff1a;https://github.com/dyc87112/spring-cloud-config-admin&#xff0c;正在紧锣密鼓的开发中&#xff0c;尽情期待&#xff01;


本文示例

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


  • Github&#xff1a;https://github.com/dyc87112/SpringCloud-Learning/
  • Gitee&#xff1a;https://gitee.com/didispace/SpringCloud-Learning/

如果您对这些感兴趣&#xff0c;欢迎star、follow、收藏、转发给予支持&#xff01;




money.jpg
推荐阅读
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 本文介绍如何在将数据库从服务器复制到本地时,处理因外键约束导致的数据插入失败问题。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
author-avatar
mobiledu2502931437
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有