Spring Cloud教程 第十一弹 Spring Cloud Config连接git和数据库
创始人
2024-03-08 04:01:45
0

Spring Cloud Config

  • 1、什么是Spring Cloud Config?
  • 2、EnvironmentRepository抽象
  • 3、实战:使用git作为配置源
    • 1、搭建config server
    • 2、搭建config client
    • 3、config server HTTP接口
  • 4、实战:使用数据库作为配置源
  • 5、实战:复合配置源

1、什么是Spring Cloud Config?

Spring Cloud Config为微服务架构提供了配置管理的功能,通过Spring Cloud Config服务端提供配置中心,在各个微服务应用的客户端读取来自服务端配置中心的配置项,配置中心的数据源可以来自git、svn、数据库、操作系统的本地文件、jar包中的文件、vault、组合。

Spring Cloud Config = 微服务配置中心。

2、EnvironmentRepository抽象

EnvironmentRepository接口的实现可提供不同的配置源,主要实现如下:

  • CompositeEnvironmentRepository:复合,如git+数据库
  • JGitEnvironmentRepository:git
  • JdbcEnvironmentRepository:数据库

接口EnvironmentRepository只提供了一个方法findOne,通过传入application、profile和label来获得配置项。

application:应用名,可通过spring.application.name配置

profile:激活的配置文件,可通过spring.profiles.active配置

label:没有特定的含义,可以当做git的分支名或版本号来用

3、实战:使用git作为配置源

1、搭建config server

在IDEA中创建一个作为config server的Maven项目,pom.xml中引入如下依赖。

Hoxton.SR4

org.springframework.cloudspring-cloud-config-server

org.springframework.cloudspring-cloud-dependencies${spring-cloud.version}pomimport

在src/main/resources/bootstrap.yml中添加如下配置:

spring:cloud:config:server:git:uri: 你的git仓库uridefault-label: mastersearch-paths: '{application}' # 搜索的目录
server:servlet:context-path: /mall_configport: 20190
debug: true

注意:

  • 这里使用了git作为配置源,需要填写你的git仓库uri,如果是私有仓库还需要配置username和password选项。
  • {application}是占位符,会被动态替换为config client的application name

在Spring Boot启动类打上@EnableConfigServer注解,最后启动项目,config server就运行起来了。

完整项目结构图如下所示。在这里插入图片描述

2、搭建config client

在IDEA中创建一个作为config client的Maven项目,pom.xml中引入如下依赖。

Hoxton.SR4

org.springframework.cloudspring-cloud-starter-config

org.springframework.cloudspring-cloud-dependencies${spring-cloud.version}pomimport

在src/main/resources/bootstrap.yml中添加如下配置:

spring:application:name: mall-eurekacloud:config:uri: http://localhost:20190/mall_configname: mall-eurekaprofile: devlabel: master
debug: true

注意:

  • 在config client的bootstrap.yml中会放一些连接config server的配置,而其它的配置就可以放到git上了

git仓库文件结构如下所示:

\---mall-eurekamall-eureka-dev.yml

完整项目结构图如下所示。
在这里插入图片描述

3、config server HTTP接口

config server提供了如下的HTTP接口,可以直接在浏览器上访问URL看到配置。

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

比如这样的一个URL:http://localhost:20190/mall_config/master/mall-eureka-dev.yml

4、实战:使用数据库作为配置源

首先准备一张数据库表:

CREATE TABLE properties (id int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '物理主键',application varchar(255) COMMENT 'application',`profile` varchar(255) COMMENT 'profile',label varchar(255) COMMENT 'label',`key` varchar(255) COMMENT 'key',`value` varchar(255) COMMENT 'value',`desc` varchar(255) COMMENT '描述',create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',modify_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='spring cloud config jdbc配置源';

其中表名必须叫properties,且表中必须要有application、profile、label、key、value这几个字段,官方规定的。

由于使用数据库配置源,因此要连接数据库,在config server的pom.xml中还要引入以下依赖:

org.springframework.bootspring-boot-starter-jdbc

mysqlmysql-connector-java

使用如下的src/main/resources/bootstrap.yml配置:

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/tudou_mall_admin?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaiusername: rootpassword: okcloud:config:server:jdbc:sql: SELECT `KEY`, `VALUE` from `PROPERTIES` where `APPLICATION`=? and `PROFILE`=? and `LABEL`=?
server:servlet:context-path: /mall_configport: 20190
debug: true

可以看到,spring.cloud.config.server.git配置项变成了spring.cloud.config.server.jdbc,另外多个数据源的配置。

5、实战:复合配置源

如果我想使用git和数据库作为双重作为配置源,可能是多个git和多个数据库,该怎么办呢?

有两种方式:

  1. 利用composite,会使用全部的配置源,优先级按列出的顺序,最顶上的优先级最高
  2. 利用spring.profiles.active激活多个配置,可动态选择使用全部配置源中的一部分,可以使用order配置项进行排序

方式1配置如下:

spring:profiles:active: compositecloud:config:server:composite:-type: gituri: https://gitee.com/bobostudy/com.tudou.mall.config.gitdefault-label: mastersearch-paths: '{application}' # 搜索的目录-type: jdbcsql: SELECT `KEY`, `VALUE` from `PROPERTIES` where `APPLICATION`=? and `PROFILE`=? and `LABEL`=?

方式2配置如下:

spring:profiles:active: git,jdbccloud:config:server:git:uri: https://gitee.com/bobostudy/com.tudou.mall.config.gitdefault-label: mastersearch-paths: '{application}' # 搜索的目录order: 0jdbc:sql: SELECT `KEY`, `VALUE` from `PROPERTIES` where `APPLICATION`=? and `PROFILE`=? and `LABEL`=?order: 1

相关内容

热门资讯

最新!靖国神社被起诉 据央视新闻,当地时间23日,二战时期被日军强制征兵的部分韩籍遇难者遗属向首尔中央地方法院提起诉讼,要...
靖国神社,被起诉! 当地时间23日,二战时期被日军强制征兵的部分韩籍遇难者遗属向首尔中央地方法院提起诉讼,要求日本靖国神...
国台办:为“台独”分裂势力为虎... 中新社北京12月24日电 (陈建新 李百加)国务院台办发言人彭庆恩24日在北京表示,凡危害国家主权、...
怀宁县清河乡“一站式”调解架起... 诉求“只进一扇门”,调处“最多跑一地”。在怀宁县清河乡,这不仅仅是一句口号,更是当地群众化解矛盾纠纷...
钧达股份:充分利用海南相关优惠... 证券之星消息,钧达股份(002865)12月23日在投资者关系平台上答复投资者关心的问题。 投资者提...
信用修复制度助力企业重塑信用 信用修复作为社会信用体系建设的关键环节,对于帮助信用主体纠正错误、重塑信用、重返市场具有不可替代的作...
《秦皇岛市餐厨废弃物管理条例》... 12月23日,记者从市政府新闻办召开的《秦皇岛市餐厨废弃物管理条例》(以下简称《条例》)颁布实施新闻...
最高法等三部门联合发布婚姻家庭... 家和万事兴,家齐国安宁。为深入学习贯彻党的二十大和二十届历次全会精神,贯彻落实习近平总书记关于注重家...
追债超9000万元遇阻!被告破... 12月23日,瀚川智能(688022)发布公告,近日公司收到江西省吉安市中级人民法院对公司出具的《民...