SpringCloud之Config
1.背景
在前的学习中,我们几乎解决了springCloud的所有常规应用,但是大家有没有想过这样一个问题:
是使用微服务后,有非常多的application.yml文件,每个模块都有一个,实际开发中还有开发环境、测试环境、预发布环境、正式环境等,
可能经常修改配置文件,但是不能每次都到项目中去修改呀,这样得把人累死,于是springCloud config就挺身而出,解决了这个问题。
2.springCloud config简介
Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。
使用Config Server,您可以在所有环境中管理应用程序的外部属性。
客户端和服务器上的概念映射与Spring Environment和PropertySource抽象相同,因此它们与Spring应用程序非常契合,但可以与任何以任何语言运行的应用程序一起使用。
随着应用程序通过从开发人员到测试和生产的部署流程,您可以管理这些环境之间的配置,并确定应用程序具有迁移时需要运行的一切。
服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具。
可以轻松添加替代实现,并使用Spring配置将其插入。
来自:https://www.springcloud.cc/spring-cloud-config.html
总结:就是将配置文件与代码分离,单独放在一个git库里面独立管理
实现原理图:
3.config server端简单使用
第一步:创建一个专门放配置文件的git仓库,如果还不会使用git仓库,可以学习<<git实战>>
创建好的git仓库地址为:https://github.com/bangbangw/demo-config.git
随便上传一个application.yml文件到该仓库,为了便于理解,我这里直接拷贝之前项目里面的application.yml文件,然后按照对应的端口号命名,
例如上传9001的application.yml文件命名为:application-9001.yml
实际上传后的git仓库文件如下:
第二步:创建config服务端模块:config-server-5001
pom.xml文件 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- 避免Config的Git插件报错:https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit -->
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>4.10.0.201712302008-r</version>
</dependency>
application.yml文件
# 基本配置
server:
port: 5001
context-path: / # 应用名称、git地址配置
spring:
application:
name: service-config
cloud:
config:
server:
git:
skipSslValidation: true #是否跳过https检查
uri: https://github.com/bangbangw/demo-config.git #git仓库地址,也可以不添加.git后缀
search-paths:
- path1 # 注意 - 与 path1 之间有空格,非根路径下得目录
- path2
#username: xxxx git 登录名 (一般都是配置的秘钥登录,不是账号密码登录)
#password: xxxx git 登录密码
ConfigServerApplication_5001.java 启动文件
package com.wfd360; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.cloud.config.server.EnableConfigServer; /**
* @author 姿势帝-博客园
* @address https://www.cnblogs.com/newAndHui/
* @WeChat 851298348
* @create 07/25 4:57
* @description
*/ @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@EnableConfigServer
public class ConfigServerApplication_5001 { public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication_5001.class, args);
}
}
第三步:测试
启动5001
请求路径匹配规则:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
我们使用简单的第二条即:/{application}-{profile}.yml
实际访问路径:http://localhost:5001/application-9001-profile.yml ,结果如下:
4.config client基本使用
客户端其实就是指将之前我们的模块不读取本地文件,而是将配置文件放在git,然后使用git上的配置文件,
如果是实际生产很简单:1.上传配置文件到git; 2.填加一个 bootstrap.yml文件, 搞定!
案例中,我们以改造6001为例讲解
第一步:在6001中添加 bootstrap.yml,用于连接config server服务端
为了优先读取config server 中的配置文件,我们需要把读取config server相关的配置放入 bootstrap.yml,把其他配置放入 application.yml中
因此:
bootstrap.yml 文件为:
spring:
application:
name: config-client-dev
cloud:
config:
uri: http://localhost:5001 # config server 服务端地址
label: master # git中的分支 默认master
name: application6001 # 文件名称
profile: dev2 # 文件名, 最终生效文件名称是git上的:name + dev = application6001-dev.yml
fail-fast: true
为了便于区分到底读取的是git上的配置文件还是本地的 application.yml 文件,我们在application.yml 文件中添加一个参数
# 自定义配置参数,假设是实际生产中的微信openid
sys:
weChat:
appid: 1111111111111-default
为了便于测试,写一个测试用的controller为:TestController ,只是为了测试
package com.wfd360.controller; import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; /**
* @author 姿势帝-博客园
* @address https://www.cnblogs.com/newAndHui/
* @WeChat 851298348
* @create 07/25 6:42
* @description
*/
@RestController
public class TestController {
@Value(value = "${sys.weChat.appid}")
private String appId; /**
* 模拟测试:config client 是否生效
* 测试逻辑:如果生效,获取到的appid将不一样
*/
@GetMapping("/api/appid")
public Object getAppId() {
System.out.println("appid=" + appId);
return appId;
}
}
第二步:上传测试用的application.yml文件,这里以上传6001模块的application为例
application6001-dev.yml配置文件
server:
port: 6001
context-path: /
# 数据源配置
spring:
application:
name: service-ticket
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db_station
username: root
password: admin
jpa:
hibernate:
ddl-auto: update
show-sql: true
thymeleaf:
cache: false
# eureka 注册中心配置
eureka:
instance:
hostname: localhost #eureka客户端主机实例名称
appname: service-ticket #客户端服务名称(可以随意取)
instance-id: service-ticket:6001 #客户端实例名称(可以随意取)
prefer-ip-address: true #显示ip地址
client:
service-url:
#defaultZone: http://localhost:7001/eureka #eureka的服务器地址(单机)
defaultZone: http://eureka7001.wfd360.com:7001/eureka/,http://eureka7002.wfd360.com:7002/eureka/,http://eureka7003.wfd360.com:7003/eureka/ # 集群 # 服务提供者信息
info:
version: v2
WeChat: 851298348
负责人: 姿势帝 # 自定义配置参数
sys:
weChat:
appid: 1111111111111-dev
为了便于验证测试结果,我在文件末尾添加了不同的微信openid,若果是dev文件为.....11-dev,如果是prd文件为.....11-prd,如果是test文件为.....11-test
第三步:测试
启动config server 服务5001,在启动config client 客户端 6001,
测试服务端是否能正常访问:http://localhost:5001/application6001-dev-profile.yml
测试服务端是否能正常访问:http://localhost:5001/application6001-prd-profile.yml
测试服务端是否能正常访问:http://localhost:5001/application6001-test-profile.yml
通过如下修改
然后访问:http://localhost:6001/api/appid 观察结果.
到此,我们已经完成了如何将application.yml文件存放在git,然后项目获取并生效,达到了常规微服务项目对配置文件的管理需求.
当然,大家在测试的过程分钟发现,虽然配置文件确实生效了,但是每次修改都需要重启项目,感觉还是有点不完美,
其实要完成这个,也是很简单的,只是需要涉及到消息队列,但是我们还没有详细讲解消息队列相关的知识......因此感兴趣的同学可以先自己查资料完成这个,获取期待我们下次的课程补充上这个.
完美!
springCloud课程与代码下载:https://www.cnblogs.com/newAndHui/p/13210228.html
SpringCloud之Config的更多相关文章
- SpringCloud创建Config读取本地配置
1.说明 Config Server获取配置支持的方式很多, 包括Git仓库(github/gitee等),任何与JDBC兼容的数据库, Subversion,Hashicorp Vault,Cred ...
- SpringCloud创建Config Client通过Eureka访问Config
1.说明 本文详细介绍配置中心客户端使用方法, 即Config Client到Config Server读取配置. 读取配置的方式有两种, 第一种是直接配置Configer Server的URL, 第 ...
- SpringCloud创建Config Client配置读取
1.说明 本文详细介绍配置中心客户端使用方法, 即Config Client到Config Server读取配置, 这里以创建Config Client服务为例, 基于已经创建好的Config Ser ...
- 【微服务】- SpringCloud中Config、Bus和Stream
文章目录 SpringCloud中Config 1.Config的简介 官网 分布式系统面临的问题 config是什么 如何使用 能做什么 与git的配合使用 2.Config服务端的配置和测试 准备 ...
- SpringCloud的Config:ConfigServer注册到EurekaServer中,变成一个Eureka服务
一.概念与定义 1.将SpringCloud ConfigServer注册到 EurekaServer,以便ConfigClient以服务的方式引用ConfigServer 2.客户端不再引用 Con ...
- springcloud之config配置中心-Finchley.SR2版
本篇和大家分享的是springcloud-config配置中心搭建,写到这里突然想起自己曾今开源过基于Redis发布订阅编写的一个配置中心,刚看了git星数有点少哈哈,这里顺势发个连接欢迎大侠们点赞: ...
- SpringCloud系列——Config 配置中心
前言 Spring Cloud Config为分布式系统中的外部化配置提供了服务器端和客户端支持.有了配置服务器,您就有了一个中心位置来管理跨所有环境的应用程序的外部属性.本文记录实现一个配置中心.客 ...
- java框架之SpringCloud(7)-Config分布式配置中心
前言 分布式系统面临的配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中标会出现大量的服务.由于每个服务都需要必要的配置信息才能运行,所以一套集中式的.动 ...
- springcloud之config 配置管理中心之配置属性加密解密
1.为什么要加密解密? 为了维护项目的安全性. 2.配置加密解密的前提是什么? 要进行JCE下载,然后替换掉jdk的security文件: 下载链接:http://www.oracle.com/tec ...
- Spring-Cloud之Config配置中心-7
一.我们前面基本上都是讲解的Spring Cloud Netflix的组件,下面我们会重点说Spring Cloud Config分布式配置中心.为什么需要这个组件来管理配置呢?在分布式应用开发过程中 ...
随机推荐
- ORB随便记一记
论文摘取 (这部分看的是泡泡机器人的翻译) 基于特征点.单目.完全自动初始化,基于PTAM框架. 相关工作 A.位置识别(大概是用于回环检测) bags of words FAB-map DBOW2 ...
- linux服务器安装svn超详细介绍
#!/bin/sh REPOS="$1" REV="$2" export LANG=en_US.UTF-8 LOG_PATH=/tmp/svn.log echo ...
- 光学动作捕捉系统中的反光标识点(Marker点)
动作捕捉系统本质上是一种定位系统,通常需要在目标物布置定位设备进行追踪.以红外光学为原理的动作捕捉系统,主要由由光学镜头.动作捕捉软件.反光标识点.POE交换机.和若干配件组成,其中反光标识点(Mar ...
- 一个完整的socket recv()案例,包括解决粘包、服务器主动推数据的问题
前言: 本文是针对socket长连接(涉及到服务器主动推数据),每个包头的拼接算法和长度都不一样,具体的包头小伙伴们问自己公司的开发吧,本文只是提供思路.再啰嗦一句:recv到的包头中数字进行某种运算 ...
- Codeforces Round #735 (Div. 2) 题解
比赛地址:https://codeforces.com/contest/1554. 只有 ABCD 的题解,E 不会. A 答案是 \(\max_i\{a_ia_{i+1}\}\).证明:(反证)如果 ...
- jvm源码解读--09 创建oop对象,将static静态变量放置在oop的96 offset处 第二篇
先打断点systemDictionary.cpp 1915行 Universe::fixup_mirrors(CHECK); 进入 void Universe::fixup_mirrors(TRAPS ...
- java垃圾回收机制学习总结
最近学习了一下java垃圾回收机制,将其主要内容大致总结一下: 1.什么是垃圾回收机制 java GC机制(garbage collection,垃圾收集,垃圾回收),是java特有的机制,作为jav ...
- homeless靶机
仅供个人娱乐 靶机信息 下载地址:https://www.vulnhub.com/entry/homeless-1,215/ 一.主机扫描 二.信息收集 在网页源码和页面上,我们发现User-Agen ...
- ArrayList 源码底层实现解析 基于1.8
ArrayList 介绍 ArrayList是一种线性数据结构,它的底层是用数组实现的,是动态数组.与Java中的数组相比,它的容量能动态增长.源代码里有解释.当创建一个数组的时候,就必须确定它的大小 ...
- Arp欺骗和DNS投毒
中间人攻击 ARP缓存攻击 ARP(Address Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的网络层,负责将某个IP地址解析成对应的MAC地址.简单来说,就 ...