SpringCloud-31-Spring Cloud Config微服务与配置文件解耦

news/2024/4/16 12:38:35/文章来源:https://blog.csdn.net/weixin_42045639/article/details/127241441

11.8 微服务与配置文件解耦

  • 我们可以将之前的子模块中的配置提取出来,托管到gitee上统一管理,这样运维人员维护配置文件就不变动子模块了,实现了模块与配置的解耦。

  • 下面用例子来解释下这种做法的好处

  • 在基础工程spring-cloud-microservice下,建立和microservice-cloud-eureka-7003一样的microservice-cloud-eureka-config-7003注册中心,需要在microservice-cloud-eureka-7003工程pom的基础上补充config相关依赖在这里插入图片描述

<!--配置中心客户端依赖-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId><version>3.1.4</version>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- Spring Boot 监控模块,完善监控信息-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • 在microservice-cloud-eureka-config-7003的类路径下/resources不要application.yml配置文件,新建一个bootstrap.yml系统级配置文件,是配置连接spring cloud config server服务中心的相关配置尽可能简单
#bootstrap.yml 是系统级别的,加载优先级高于 用户级别application.yml ,负责从外部加载application.yml配置并解析
#对应了java的加载器,根加载器由于用户加载器
spring:application:name: MicroserviceCloudEurekaConfig7003  #微服务名称,对外暴漏的微服务名称,十分重要cloud:config:label: master #仓库分支名name: configEureka #配置文件名称,如:application-dev.yml 中的 application,或application.yml集成配置文件profile: dev #环境名 如:application-dev.yml 中的 application, 中的 dev,或application.yml继承环境中的dev#别忘记添加 http:// 否则无法读取##Spring Cloud Config Server地址uri: http://localhost:8016
  • 而其他的如eureka的配置抽取出来作为configEureka.yml提交到gitee上,注意此处端口和注册中心域名在不同环境中不同作为不同环境测试内容。
spring:profile:active: dev---
server:port: 7003
spring:config:activate:on-profile: dev
#eureka配置,Spring cloud 自定义服务名称和 ip 地址
eureka:instance:hostname:  eurekaserver7003.com  #eureka7001.comeureka服务端的实例名称,主机名是否可以在配置时确定(否则将从操作系统原语中猜测)client:register-with-eureka: false #false表示不向注册中心注册自己。fetch-registry: false #指示此客户端是否应从 eureka 服务器获取 eureka 注册表信息service-url: #监控页面地址#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #发布的服务注册中心地址,单机defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7002.com:7002/eureka/ #集群版 将当前的 Eureka Server 注册到 7003 和 7003 上,形成一组互相注册的 Eureka Server 集群---
server:port: 7004
spring:config:activate:on-profile: test
#eureka配置,Spring cloud 自定义服务名称和 ip 地址
eureka:instance:hostname:  eurekaserver7004.com  #eureka7001.comeureka服务端的实例名称,主机名是否可以在配置时确定(否则将从操作系统原语中猜测)client:register-with-eureka: false #false表示不向注册中心注册自己。fetch-registry: false #指示此客户端是否应从 eureka 服务器获取 eureka 注册表信息service-url: #监控页面地址#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #发布的服务注册中心地址,单机defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7002.com:7002/eureka/ #集群版 将当前的 Eureka Server 注册到 7003 和 7003 上,形成一组互相注册的 Eureka Server 集群
  • 这样先启动下microservice-cloud-config-server-8016配置服务,访问http://localhost:8016/master/configEureka-dev.yml说明config server连接正常
    在这里插入图片描述

  • 然后启动microservice-cloud-eureka-config-7003注册中心,访问http://localhost:7003/结果如下。注意此时的7003端口是从config server处读取的。
    在这里插入图片描述

  • 由此可知microservice-cloud-eureka-config-7003成功启动并运行

  • 然后同样的在基础工程spring-cloud-microservice下建立仿制microservice-cloud-provider-dept-8001服务提供模块建立一个microservice-cloud-provider-dept-config-8001模块,代码基本相同。项目结构如图
    在这里插入图片描述

  • 同样需要在pom中补充config相关依赖

<!-- Spring Boot 监控模块,完善监控信息-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
  • application.yml里面为空文件,只需要在bootstrap.yml系统级配置文件中配置连接spring cloud config server服务中心的相关配置尽可能简单。
#bootstrap.yml 是系统级别的,加载优先级高于 用户级别application.yml ,负责从外部加载application.yml配置并解析
#对应了java的加载器,根加载器由于用户加载器
spring:cloud:config:label: master #仓库分支名name: configdept #配置文件名称,如:application-dev.yml 中的 application,或application.yml集成配置文件profile: dev #环境名 如:application-dev.yml 中的 application, 中的 dev,或application.yml继承环境中的dev#别忘记添加 http:// 否则无法读取##Spring Cloud Config Server地址uri: http://localhost:8016
  • 而其他的如eureka,数据源相关的配置抽取出来作为configdept.yml提交到gitee上,注意此处数据源在不同环境中连接的数据库不同作为不同环境测试内容
spring:profile:active: dev---
server:port: 8001
spring:application:name: microservicecloudproviderdeptconfigDev #微服务名称,对外暴漏的微服务名称,十分重要config:activate:on-profile: devdatasource:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 123456url: jdbc:mysql://localhost:3306/springcloud_db2?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimeZone=UTCtype: com.alibaba.druid.pool.DruidDataSource#SpringBoot默认是不注入这些的,需要自己绑定#druid数据源专有配置initialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入#如果允许报错,java.lang.ClassNotFoundException: org.apache.Log4j.Priority#则导入log4j 依赖就行filters: stat,wall,log4j2maxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500#整合mybatis
mybatis:type-aliases-package: com.zk.springcloud.entitymapper-locations: classpath:mybatis/mapper/*.xml#config-location: classpath:mybatis/mybatis-config.xmlconfiguration:map-underscore-to-camel-case: true #默认开启驼峰命名法,可以不用设置该属性#eureka配置,Spring cloud 自定义服务名称和 ip 地址
eureka:client:service-url:#defaultZone: http://localhost:7001/eureka/  #这个地址是 7001注册中心在 application.yml 中暴露出来额注册地址 (单机版)defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7002.com:7002/eureka/,http://eurekaserver7003.com:7003/eureka/ #将服务注册到 Eureka Server 集群fetch-registry: trueinstance:instance-id: microservice-cloud-provider-dept-config-8001-dev #自定义服务名称描述信息prefer-ip-address: true           #显示访问路径的 ip 地址#zookeeper需要配置那些服务service被扫描,eureka则是将整个服务包注册进去了# spring cloud 使用 Spring Boot actuator 监控完善信息
# Spring Boot 2.50对 actuator 监控屏蔽了大多数的节点,只暴露了 heath 节点,本段配置(*)就是为了开启所有的节点
management:endpoints:web:exposure:include: health,info  #应包含的端点 ID 或 '' 全部,* 在yaml 文件属于关键字,所以需要加双引号#include的值也可以改成*,但建议还是最小暴露原则,用啥开启啥info:env:enabled: true   #启用配置里的info开头的变量info:             #配置一些服务描述信息,监控信息页面显示,,可以判断服务是否正常app.name: microservice-cloud-provider-dept-config-8001-devcompany.name: cloud.zk.comauth: zkemail: 123@qq.com#build.aetifactId: @project.artifactId@#build.version: @project.version@---
server:port: 8002
spring:application:name: microservicecloudproviderdeptconfigTest #微服务名称,对外暴漏的微服务名称,十分重要config:activate:on-profile: testdatasource:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 123456url: jdbc:mysql://localhost:3306/springcloud_db3?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimeZone=UTCtype: com.alibaba.druid.pool.DruidDataSource#SpringBoot默认是不注入这些的,需要自己绑定#druid数据源专有配置initialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入#如果允许报错,java.lang.ClassNotFoundException: org.apache.Log4j.Priority#则导入log4j 依赖就行filters: stat,wall,log4j2maxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500#整合mybatis
mybatis:type-aliases-package: com.zk.springcloud.entitymapper-locations: classpath:mybatis/mapper/*.xml#config-location: classpath:mybatis/mybatis-config.xmlconfiguration:map-underscore-to-camel-case: true #默认开启驼峰命名法,可以不用设置该属性#eureka配置,Spring cloud 自定义服务名称和 ip 地址
eureka:client:service-url:#defaultZone: http://localhost:7001/eureka/  #这个地址是 7001注册中心在 application.yml 中暴露出来额注册地址 (单机版)defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7002.com:7002/eureka/,http://eurekaserver7004.com:7004/eureka/ #将服务注册到 Eureka Server 集群fetch-registry: trueinstance:instance-id: microservice-cloud-provider-dept-config-8001-test #自定义服务名称描述信息prefer-ip-address: true           #显示访问路径的 ip 地址#zookeeper需要配置那些服务service被扫描,eureka则是将整个服务包注册进去了# spring cloud 使用 Spring Boot actuator 监控完善信息
# Spring Boot 2.50对 actuator 监控屏蔽了大多数的节点,只暴露了 heath 节点,本段配置(*)就是为了开启所有的节点
management:endpoints:web:exposure:include: health,info  #应包含的端点 ID 或 '' 全部,* 在yaml 文件属于关键字,所以需要加双引号#include的值也可以改成*,但建议还是最小暴露原则,用啥开启啥info:env:enabled: true   #启用配置里的info开头的变量info:             #配置一些服务描述信息,监控信息页面显示,,可以判断服务是否正常app.name: microservice-cloud-provider-dept-config-8001-testcompany.name: cloud.zk.comauth: zkemail: 123@qq.com#build.aetifactId: @project.artifactId@#build.version: @project.version@
  • 然后访问http://localhost:8016/master/configdept-dev.yml说明config server连接正常
    在这里插入图片描述

注意若是git上有其他的名为application.yml配置文件,有可能会和别的配置文件,如:configdept.yml的配置项糅合,导致配置文件莫名多出一些配置,所以最好将application.yml修改为模块对应的名称

  • 然后启动microservice-cloud-provider-dept-config-8001模块,访问http://localhost:8001/dept/list结果如下,
    在这里插入图片描述

  • 由数据源字段显示,说明microservice-cloud-provider-dept-config-8001成功启动并成功读取到配置文件内容,读取了开发环境springcloud_db2数据库中的内容

  • 然后修改configEureka.yml为test测试环境并提交,激活test环境,修改microservice-cloud-eureka-config-7003中bootstrap.yml的读取的环境配置为test,

  • 然后启动microservice-cloud-eureka-config-7003注册中心,访问http://localhost:7004/结果如下。说明此时测试环境配置生效。
    在这里插入图片描述

  • 然后修改configdept.yml为test测试环境并提交,激活test环境。修改microservice-cloud-provider-dept-config-8001中bootstrap.yml的读取的环境配置为test。

  • 然后启动microservice-cloud-provider-dept-config-8001注册中心,访问http://localhost:8001/dept/list结果如下。说明此时测试环境配置生效。
    在这里插入图片描述

  • 这样就实现了微服务下配置中心的统一管理,实现了配置文件于模块的解耦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_398836.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

热血江湖服务端架设开服搭建教程

热血江湖服务端架设开服搭建教程 玩网游比较多的小伙伴&#xff0c;相信对热血江湖这款游戏也不陌生&#xff0c;摆脱了传统武侠游戏阴暗血腥的游戏风格&#xff0c;提倡一种“明朗而愉快的武侠”精神。画面上即不会太随意又不会过于沉重&#xff0c;画面干净清新。活泼可爱的…

ORACLE新增数据库(用户),使用navicate

oracle新增数据库并不像mysql直接指令就行&#xff0c;百度一圈都是用Oracle Database Configuration Assistant的&#xff0c;其实navicate就直接可以新建&#xff0c;以下是新建方法&#xff1a; 1.连接数据库 2.新建表空间 点击navicate上方工具栏中"其它"&…

何为功能平价?特斯拉「抛弃」多传感融合,背后有哪些门道

技术与成本&#xff0c;永远是博弈的两方。 当大部分车企都在寻求通过增加更多、更高性能的传感器&#xff08;也就是通常所说的多传感融合技术&#xff09;来强化智能驾驶功能可靠性和拓展性的大背景下&#xff0c;特斯拉依然我行我素&#xff0c;继续沿着纯视觉感知的路线前…

盘点一个Python列表(元素多样)处理的实战题目(使用正则表达式也可以实现)

大家好,我是Python进阶者。 一、前言 前几天在Python白银交流群【凡人不烦人】问了一个Python列表处理的问题,提问截图如下:下面是他的部分数据: lst = [(问答题)(2) 假设镀锌钢管, http://admintk.sc.zzstep.com/UpLoadImage/2019-10-10/a84f340e-6c67-42b1-8eae-3dc14281…

队列的操作实验(数据结构)

队列的操作实验&#xff08;数据结构&#xff09; 一、实验目的 1&#xff0e;掌握队列存储结构的表示和实现方法。 2&#xff0e;掌握队列的入队和出队等基本操作的算法实现。 3&#xff0e;了解队列在解决实际问题中的简单应用。 二、实验内容 1&#xff0e;建立顺序循环队列…

【LeetCode】【二叉搜索树迭代器】

173. 二叉搜索树迭代器 实现一个二叉搜索树迭代器类BSTIterator &#xff0c;表示一个按中序遍历二叉搜索树&#xff08;BST&#xff09;的迭代器&#xff1a; BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指…

【优化充电】基于matlab粒子群算法电动汽车充电动态优化策略【含Matlab源码 2163期】

一、粒子群算法电动汽车充电优化 1 电动汽车充电负荷估算 电动汽车的充电负荷主要与电动汽车起始充电时刻和充电时长相关,而起始充电时刻是由电动汽车用户的到家时间决定的,充电时长主要与电动汽车的行驶里程和充电倍率相关。 目前电动汽车还没有大规模运营, 只能通过统计燃油…

ASP.NET Core微服务(六)——【.Net Core操作redis】StackExchange.Redis

ASP.NET Core微服务(六)——【.Net Core操作redis】StackExchange.Redis 目录 ASP.NET Core微服务(六)——【.Net Core操作redis】StackExchange.Redis 项目创建 StackExchange.Redis操作示例 引包【using StackExchange.Redis;】 ConnectionMultiplexer RedisDBHelper …

Git学习总结

目录&#xff1a; &#xff08;1&#xff09;版本控制 &#xff08;2&#xff09;Git和SVN的区别 &#xff08;3&#xff09;Git历史 &#xff08;4&#xff09;安装Git及环境配置 &#xff08;5&#xff09;常用的Linux命令 &#xff08;6&#xff09;Git的必要配置 &a…

PMO和PM如何实现从战略解码到项目执行的端到端闭环?

一、PMO的使命与职责 PMO的使命是提升端到端组织效能&#xff0c;赋能于精细化管理&#xff0c;成为企业的加速器&#xff0c;保障战略项目的交付。 那么PMO要保障战略的交付&#xff0c;核心职责有哪些呢&#xff1f; 二、组织为什么需要端到端项目管理&#xff1f; 核心价…

【ZooKeeper】ZooKeeper 应用场景

ZooKeeper 应用场景发布订阅命名服务集群管理分布式锁分布式队列管理负载均衡配置管理ZooKeeper&#xff1a;分布式协调服务&#xff0c;仲裁机构。基于ZNode数据模型和Watcher监听机制可以解决很多问题&#xff0c;比如分布式锁问题。 应用场景如下&#xff1a; 1、发布/订阅 …

servlet基础知识

早期的Web应用主要用于浏览新闻等静态页面&#xff0c;HTTP服务器&#xff08;比如 Apache、Nginx&#xff09;向浏览器返回静态 HTML&#xff0c;浏览器负责解析HTML&#xff0c;将结果呈现给用户。随着互联网的发展&#xff0c;还希望进行一些交互操作来获取动态结果&#xf…

Python Turtle绘图基础(一)——Turtle简介、绘图窗体与绘图区域

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是Python Turtle绘图基础&#xff0c;包括Turtle简介、绘图窗体与绘图区域。 一、Turtle库简单介绍 Turtle库时Python语言的标准库&#xff08;所谓标准库&#xff0c;就是在安装Python时自带的库&#xff0c;与之…

【经典面试题-LeetCode69/剑指 Offer II 072:x 的平方根 (Python3实现)】

x 的平方根一、题目描述1.题目内容2.样例二、解决方案1.基本代码&#xff08;成功提交&#xff09;2.略微拓展一、题目描述 这是一道经典的面试题&#xff0c;需要我们在不使用任何内置函数的前提下&#xff0c;手动实现求指定整数的算术平方根。 1.题目内容 给你一个非负整数…

Android开发——底部导航栏设计

底部导航栏设计1.依赖配置2.tabbar的UI实现3.tabbar的逻辑绑定4.tabbar的滑动与点击联动其实,常见的Android和微信小程序一样&#xff0c;通常最下面一排需要有一排导航栏&#xff0c;可以通过点击导航栏图标和滑动实现页面跳转&#xff0c;具体实现使用的是Android的 ViewPage…

在MUI框架中对于事件绑定与取消和监听的触发自定义的深入运用与实战

事件绑定 除了使用addEventListener&#xff08;&#xff09;方法侦听特定元素上的事件外&#xff0c;还可以使用。on&#xff08;&#xff09;方法实现批元素的事件绑定。 event Type: String 需监听的事件名称&#xff0c;例如&#xff1a;‘tap’ selector Type: String 选择…

MySQL集群搭建——主从同步(一主二从)

一、安装MySQL数据库 Centos7安装MySQL5.7 目前准备了三台服务器作为主从配置数据库 #主 192.168.159.100:3306 #从 192.168.159.101:3306 #从 192.168.159.102:3306二、修改主数据库配置文件 vim /etc/my.cnf #在mysqld模块中添加如下配置信息 #开启二进制日志 log-binmast…

Win10家庭版利用Hyper-V虚拟机安装Kali Linux

目录 安装Hyper-V 批处理安装 重启电脑 下载Kali镜像 Kali官网下载 Hyper-V虚拟机 创建虚拟机 启动虚拟机 安装Kali 安装前配置 磁盘分区 系统安装 登录系统 近期学习网络安全的相关内容&#xff0c;需要用到很多的安全工具。偶然得知Kali Linux就是专门为网络安…

SD-WAN是面向分支机构的新兴、不断发展的解决方案

在过去的二十年里&#xff0c;人们的工作方式发生了很大变化。共享办公空间、移动性和云现在很常见。业务分散&#xff0c;分支机构得到授权。 当然&#xff0c;这个新功能是一件好事。但是&#xff0c;与此同时&#xff0c;它提出了一个巨大的挑战&#xff1a;多协议标签交换(…

【潮流计算】基于matlab粒子群算法优化电力系统潮流计算【含Matlab源码 2157期】

一、粒子群算法简介 1 标准粒子群优化(PSO)算法 PSO算法根据对环境的适应度将群体中的个体移动到好的区域,将每个个体看作是D维搜索空间中的一个粒子,根据粒子本身的飞行经验和群体中其他同伴的飞行经验调整下一步飞行方向,从而搜索到最好的空间位置解。设第i个粒子的位置表示…