Java Spring Cloud XXIII 之 配置中心

news/2024/7/7 21:53:46

Java Spring Cloud XXIII 之 配置中心

配置中心

1.配置中心简介

所谓配置中心:将项目需要的配置信息保存在配置中心,需要读取时直接从配置中心读取,方便配置管理的微服务工具

我们可以将部分yml文件的内容保存在配置中心

一个微服务项目有很多子模块,这些子模块可能在不同的服务器上,如果有一些统一的修改,我们要逐一修改这些子模块的配置,由于它们是不同的服务器,所以修改起来很麻烦

如果将这些子模块的配置集中在一个服务器上,我们修改这个服务器的配置信息,就相当于修改了所有子模块的信息,这个服务器就是配置中心

使用配置中心的原因就是能够达到高效的修改各模块配置的目的

2.配置中心的使用

Nacos既可以做注册中心,也可以做配置中心

Nacos做配置中心,支持各种格式\类型的配置文件

properties\yaml(yml)\txt\json\xml等

3.Nacos数据结构

请添加图片描述
namespace:命名空间

group:分组

Service/DataId:具体数据

命名空间

namespace是Nacos提供的最大的数据结构

一个Nacos可以创建多个命名空间

一个命名空间能够包含多个group

在nacos中创建命名空间
请添加图片描述
在上图连接的位置可以新增命名空间,填写命名空间名称和描述即可

Nacos有默认的命名空间public不能删除和修改

添加命名空间后,我们在Nacos中注册的服务或添加的配置就可以指定命名空间了

因为多个命名空间可以隔离项目,每个项目使用自己的命名空间,互不干扰
请添加图片描述
分组

一个命名空间中可以有多个分组,进行进一步分离

我们使用时,如果不需要进一步分组,推荐使用group名称:DEFAULF_GROUP

服务或配置

确定了命名空间和分组之后

我们就可以添加服务或配置了

之前我们启动的各种模块都是服务,之前都是默认保存在public命名空间中

下面我们主要使用配置中心的功能,在命名空间中添加配置

添加配置就是设置DataId

实际在Nacos中定位一个配置的结构为

Namespace>Group>DataId

4.Nacos添加配置

Nacos首页->配置管理->配置列表->添加配置(右侧的大"+"号)
请添加图片描述
添加cart模块数据库连接配置
请添加图片描述
点击发布,nacos就保存这个配置了

5.项目读取配置

如果要读取配置中心的信心,首先要添加依赖

<!--  配置中心的依赖  -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--  支持SpringCloud加载系统配置文件的依赖   -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

像其他程序一样,在添加完依赖之后,还需要添加yml文件的配置

我们使用过application.properties和application.yml两种配置文件添加配置

实际上这两个配置文件加载是有顺序的

先加载yml

后加载properties

如果两个配置文件同时设置了同一个属性,后加载的覆盖掉先加载的

在SpringCloud环境下,实际上可以再多出一组配置文件

它们是bootstarp.yml和bootstarp.properties

这一组的加载时机整体早于application这一组

所以一个SpringCloud项目加载配置文件的顺序最终可能如下图
请添加图片描述
bootstrap这组配置文件,一般用于配置加载一些系统级别的配置,这些配置的特征是一般不会轻易修改

我们再后面的学习过程中,会将配置中心的信息,加载到这组配置文件中

必须是SpringCloud项目,才能支持bootstrap这组配置文件的加载

支持这组配置的依赖就是上面我们添加的依赖

<!--  支持SpringCloud加载系统配置文件的依赖   -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

注意SpringCloud版本早于2020之前,添加的不是这个依赖,可以自行查询

下面我们就在cart-webapi项目中resources文件夹中添加bootstarp.yml文件

spring:
  cloud:
    nacos:
      config:
        #  指定配置中心的位置
        server-addr: 192.168.137.150:8848
        # 指定配置文件所在的组名(命名空间默认public不需要指定)
        group: DEFAULT_GROUP
        # 设置配置文件的后缀名
        # 默认情况下会加载[服务器名].[后缀名]为DataId的配置
        # 当前项目名称为nacos-cart所以默认加载的DataId为:nacos-cart.yaml
        file-extension: yaml

如果一切顺利,那么cart模块是可以通过knife4j测试操作连接数据库的

我们可以新增购物车信息,或删除购物车信息后简单数据库是否有对应操作

因为我们已经删除了本地yml文件中数据库的配置,所以,它能连接操作数据库一定是配置中心生效了!

6.使用RestTemplate调用远程控制层方法

我们现在项目中使用的RPC远程调用技术是Dubbo

实际上除了Dubbo技术之外,还有很多远程调用的方法

它们有些调用的思想都和Dubbo完全不同

Dubbo是SpringCloudAlibaba提供的功能强大的RPC框架

但是Dubbo功能也有限制,如果我们想调用的方法不是我们当前项目的组件或功能,甚至想调用的方法不是java编写的,那么Dubbo就无能为力了

我们可以使用RestTemplate来调用任何语言编写的公开的控制器路径

也就是只要能够使用浏览器访问的路径,我们都可以使用RestTemplate发送请求,接收响应

使用步骤如下

步骤1:

先在调用的发起方,也就是使用RestTemplate发起请求的项目配置文件中,向Spring容器注入一个该类型对象

的类型,SpringBoot配置类都可以添加下面代码,我们选择SpringBoot启动类添加如下代码

@Bean
// 负载均衡的注解,编写之后采用负载均衡算法
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}

步骤2:

我们要确定要调用的控制器方法,这个方法必须是GetMapping

我们修改CartController中删除购物车的方法为@GetMapping 为了测试

我们本地stock模块减少库存的方法中使用RestTemplate调用删除购物车商品的方法

在StockController类中编写代码如下

@Autowired
private RestTemplate restTemplate;
//.....
public JsonResult reduceCommodityCount(StockReduceCountDTO stockReduceCountDTO){

        // 这里发送RestTemplate请求
        // 调用cart模块的删除购物车的方法
        // 先确定要调用的路径
        String url="http://localhost:20001/base/cart/delete" +
                "?userId={1}&commodityCode={2}";
        // 再发起调用
        // getForObject参数1请求的路径   参数2返回类型的反射
        // 从参数3开始是url中{1} 占位符的值 参数4是{2}的值 以此类推
        JsonResult jsonResult=restTemplate.getForObject(url,JsonResult.class,
                "UU100",
                stockReduceCountDTO.getCommodityCode());
        System.out.println(jsonResult);
        stockService.reduceCommodityCount(stockReduceCountDTO);
        return JsonResult.ok("商品库存减少完成!");
    }

步骤3:

发送测试

将相关的模块都启动

cart\stock

调用stock模块减少库存的方法

运行后检查购物车中减少库存的商品是否会被删除

如果删除了证明调用成功了

我是将军;我一直都在,。!


http://lihuaxi.xjx100.cn/news/141995.html

相关文章

中国及全球LNG液化天然气行业发展趋势分析告

智研瞻产业研究院专注于中国产业经济情报及研究&#xff0c;目前主要提供的产品和服务包括传统及新兴行业研究、商业计划书、可行性研究、市场调研、专题报告、定制报告等。涵盖文化体育、物流旅游、健康养老、生物医药、能源化工、装备制造、汽车电子、农林牧渔等领域&#xf…

hyperf 模型批量更新数据

使用hyperf框架没有批量更新方法&#xff0c;只能自己拼接SQL语句进行批量跟你更新 封装一个SQL句更新方法 //批量更新public function updateBatch($multipleData []){try {$tableName Db::getTablePrefix() . table;// 获取到数据里面的所有字段名$firstRow current($m…

Linux下NANDFLASH probe函数分析

本文记录一下自己平台上NANDFLASH驱动的执行流程。 驱动入口&#xff1a; module_platform_driver(ali_nand_driver); module_platform_driver是一个宏&#xff0c;位于kernel根目录下include/linux/platform_device.h,其展开如下: #define module_platform_driver(__platfo…

Java中的容器(二) 双例集合

容器(二) 双例集合 1、Map接口介绍 Map中不能包含重复的Key&#xff0c;但可以包含重复的Value。 Map中的常用方法 put方法&#xff1a;key不存在时返回空&#xff0c;key存在时更新value&#xff0c;并返回旧的value。 2、HashMap容器类 通过KeySet获取元素 Set<String…

VectorDraw开发者框架(VDF)

VectorDraw开发者框架(VDF) VectorDraw Developer Framework(VDF)是一个易于创建、管理和打印2D和3D图纸的组件。VectorDraw对象公开了与最常见的矢量格式和其他CAD对象兼容的方法和属性。它支持10多种矢量格式和多种光栅格式。VectorDrawDeveloperFramework(VDF)是完全面向对象…

arraybuffer 转json

场景后端返回的数据是arraybuffer 类型&#xff0c;请求成功下载excel&#xff0c;失败弹出错误原因 <script setup lang"ts"> import { ElMessage} from element-plus; // 下载; const exportData async (fileName: string) > {const res await downloa…

详解Git合并(Merge)错误如何回退。(包括Reset, Revert和页面回滚三种,并说明其优缺点)

文章目录1. 问题场景描述1.1 场景模拟2. 解决方案2.1 利用git reset --hard命令2.2 利用git revert 命令2.3 使用页面进行回滚&#xff08;效果与Revert一致&#xff09;1. 问题场景描述 我的项目包含两个重要git分支&#xff1a;master&#xff08;生产环境&#xff09;&…

在 AWS Marketplace 上订阅 EMQX Cloud 按量计费版

近日&#xff0c;全球领先的开源物联网数据基础设施软件供应商 EMQ 旗下的全托管 MQTT 消息云服务 EMQX Cloud 正式上架云端事业领导者亚马逊 AWS Marketplace&#xff0c;与国际各大云端软件并列销售。 在 AWS Marketplace 中即付即用的 EMQX Cloud 的推出&#xff0c;将为开…