SpringCloud Config连接git与数据库流程分析讲解
作者:初心JAVA 发布时间:2024-01-14 01:29:29
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中引入如下依赖。
<properties>
<spring-cloud.version>Hoxton.SR4</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</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>
在src/main/resources/bootstrap.yml中添加如下配置:
spring:
cloud:
config:
server:
git:
uri: 你的git仓库uri
default-label: master
search-paths: '{application}' # 搜索的目录
server:
servlet:
context-path: /mall_config
port: 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中引入如下依赖。
<properties>
<spring-cloud.version>Hoxton.SR4</spring-cloud.version>
</properties>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<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>
在src/main/resources/bootstrap.yml中添加如下配置:
spring:
application:
name: mall-eureka
cloud:
config:
uri: http://localhost:20190/mall_config
name: mall-eureka
profile: dev
label: master
debug: true
注意:
在config client的bootstrap.yml中会放一些连接config server的配置,而其它的配置就可以放到git上了
git仓库文件结构如下所示:
\---mall-eureka
mall-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中还要引入以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
使用如下的src/main/resources/bootstrap.yml配置:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/tudou_mall_admin?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: ok
cloud:
config:
server:
jdbc:
sql: SELECT `KEY`, `VALUE` from `PROPERTIES` where `APPLICATION`=? and `PROFILE`=? and `LABEL`=?
server:
servlet:
context-path: /mall_config
port: 20190
debug: true
可以看到,spring.cloud.config.server.git配置项变成了spring.cloud.config.server.jdbc,另外多个数据源的配置。
5、实战-复合配置源
如果我想使用git和数据库作为双重作为配置源,可能是多个git和多个数据库,该怎么办呢?
有两种方式:
利用composite,会使用全部的配置源,优先级按列出的顺序,最顶上的优先级最高
利用spring.profiles.active激活多个配置,可动态选择使用全部配置源中的一部分,可以使用order配置项进行排序
方式1配置如下:
spring:
profiles:
active: composite
cloud:
config:
server:
composite:
-
type: git
uri: https://gitee.com/bobostudy/com.tudou.mall.config.git
default-label: master
search-paths: '{application}' # 搜索的目录
-
type: jdbc
sql: SELECT `KEY`, `VALUE` from `PROPERTIES` where `APPLICATION`=? and `PROFILE`=? and `LABEL`=?
方式2配置如下:
spring:
profiles:
active: git,jdbc
cloud:
config:
server:
git:
uri: https://gitee.com/bobostudy/com.tudou.mall.config.git
default-label: master
search-paths: '{application}' # 搜索的目录
order: 0
jdbc:
sql: SELECT `KEY`, `VALUE` from `PROPERTIES` where `APPLICATION`=? and `PROFILE`=? and `LABEL`=?
order: 1
来源:https://blog.csdn.net/xl_1803/article/details/128138379
猜你喜欢
- 有时候需要对有角度的矩形框内图像从原图片中分割出来。这里的程序思想是,先将图片进行矩形角度的旋转,使有角度的矩形处于水平状态后,根据原来坐标
- 静态链表和动态链表区别静态链表和动态链表的共同点是,数据之间"一对一"的逻辑关系都是依靠指针(静态链表中称"游
- 本文实例讲述了php函数连续调用的方法。分享给大家供大家参考。具体如下:<?php //返回$this,实现连续调用 class xi
- 前言Django项目需要在settings.py文件中设置各种文件的路径,例如:媒体文件(media)的路径、静态文件(static fil
- 在获取 IP 时,已经成功将各个网站的代理 IP 获取下来了,然后就需要一个检测模块来对所有的代理进行一轮轮的检测,检测可用就设置为满分,不
- Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0。zfill()方法语法:str.zfill(width)参
- 您可能听说过,带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓 generator ?我们先抛开 g
- 我就废话不多说了,直接上代码吧!import numpy as npimport matplotlib.pyplot as pltx = n
- 1.数据采集和标记先采集数据,再对数据进行标记。其中采集数据要就有代表性,以确保最终训练出来模型的准确性。2.特征选择选择特征的直观方法:直
- 前言在之前实现的 JSON 解析器中当时只实现了将一个 JSON 字符串转换为一个 JSONObject,并没
- 1.变量的赋值操作只是多生成了一个变量,实际上还是指向同一个对象# -*- coding: utf-8 -*-class CPU: &nbs
- Django 教程Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Dja
- 前言小白白跑去鹅厂面试,面试官提出了一个很实际的问题: mysql增加索引,那些情况会失效呢?谈一下实际工作中遇到的情况。我们的
- 关于yii2配置操作多个数据库进行操作,文档上面也给出了具体的配置,一个实战性的例子,也是很简单的,我们这里以权限控制为单个管理库dbnam
- 需求描述在利用numpy进行数据分析时,常有的一个需求是:根据已知的数组生成新数组。这个问题又可以分为两类:根据筛选条件生成子数组;根据变换
- 本段源码可以学习的地方:1. 考虑到效率问题,可以通过上下文的机制,在属性被访问的时候临时构建;2. 可以重写一些魔术方法,比如 __new
- Hello大家好,今天说一下python的socket编程,基于python的socket通信的文本框网络聊天首先,实验环境:一个云服务器(
- 本文为大家分享了Windows下配置Python PyQt4开发环境的详细步骤,供大家参考,具体内容如下1. 下载相关软件Eclipse下载
- 下面来先看一个简单例子<!DOCTYPE html><html lang="zh-CN" ng-app
- 使用jpype调用Jar包中的实现方法安装pip install jpype1(注意要加后边这个1)使用基本流程如下:使用jpype开启jv