SpringCloudAlibaba微服务实战系列(二)Nacos配置中心

SpringCloudAlibaba Nacos配置中心

在java代码中或者在配置文件中写配置,是最不雅的,意味着每次修改配置都需要重新打包或者替换class文件。若放在远程的配置文件中,每次修改了配置后只需要重启一次服务即可。话不多说,直接干货拉满。

集成nacos配置中心

首先引入配置相关的依赖

<!--Nacos 配置中心依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--bootstrap的依赖,由于SpringCloud2020版本上bootstrap被默认禁用了所以要引入才能使用-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

其次保证项目启动时,配置先从nacos配置中心获取,所以配置都写在bootstrap.ymlbootstrap.properties中即可。bootstrap的文件比application的优先级要高。配置详情如下:

server:
  port: 9001
spring:
  application:
    name: consumer # 应用名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
      config:
        server-addr: localhost:8848 # nacos地址
        file-extension: yml # 指定配置内容的数据格式

nacos中的DataId配置

DataId主要是使当前项目快速进行多套配置内容的切换,看看DataId的组成格式:

${prefix}-${spring.profiles.active}.${file-extension}

  • prefix:项目的服务名,也就是spirng.application.name的值
  • spring.profiles.active:当前的环境
  • file-extension:文件后缀

当spring.profiles.active为空时,对应的’-'连接符也将会不存在,DataId的格式就是变换为${prefix}.${file-extension}

设置profiles为dev

server:
  port: 9001
spring:
  application:
    name: consumer # 应用名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
      config:
        server-addr: localhost:8848 # nacos地址
        file-extension: yml # 指定配置内容的数据格式

  profiles:
    active: dev

那么我们的文件名就应该为consumer-dev.yml,我们需要在nacos上创建配置,先创建consumer-dev.yml和consumer-prod.yml文件

在这里插入图片描述

在这里插入图片描述

通过代码获取这个配置,然后通过调整环境,注意它们的配置返回。

@RestController// @RestController注解是@Controller+@ResponseBody
@RefreshScope //通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新
public class ConfigController {

    @Value("${custom.info}")// 注解获取custom.info配置的值
    private String config;

    @RequestMapping("/getConfig")
    public String getConfig() {  // 获取配置的接口
        return config;
    }
}

调用查看结果:

D:\springcloud\doc>curl localhost:9001/getConfig
nacos config dev

切换为prod环境,重启项目再次调用

spring:
  profiles:
    active: prod
D:\springcloud\doc>curl localhost:9001/getConfig
nacos config prod

莫得问题~

Nacos的Group配置

group是分组的意思,表示配置内容归于哪个组,默认的是DEFAULT_GROUP组,如创建配置文件时声明一个CONSUMER_GROUP

在这里插入图片描述

java代码配置:

server:
  port: 9001
spring:
  application:
    name: consumer # 应用名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
      config:
        server-addr: localhost:8848 # nacos地址
        file-extension: yml # 指定配置内容的数据格式
        group: CONSUMER_GROUP # 指定某GROUP

  profiles:
    active: dev

重启调用

D:\springcloud\doc>curl localhost:9001/getConfig
nacos config dev CONSUMER_GROUP

nacos的Namespace配置

namespace表示命名空间,比较粗粒度的控制。默认的namespace是public,当创建新的命名空间时,如果要指定此命名空间,则需要在java配置中声明它的namespace的id值

在这里插入图片描述

如上图创建了一个命名空间,在namespace中创建consumer-dev.yml的配置文件

在这里插入图片描述

在这里插入图片描述

在java配置中namespace是填写的ID值而不是名称

server:
  port: 9001
spring:
  application:
    name: consumer # 应用名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
      config:
        server-addr: localhost:8848 # nacos地址
        file-extension: yml # 指定配置内容的数据格式
        namespace: e6d5450d-a8d3-45c4-9801-091586082104 # 命名空间的id值

  profiles:
    active: dev

Nacos的持久化

Nacos默认的是使用嵌入式数据库Derby数据库,也就表明越到后面越容易出现瓶颈,如存储容量限制,不方便数据查询、存储优化等等。Nacos支持使用mysql做数据持久化,版本要求mysql在5.6.5+

mysql数据持久化

在mysql中创建一个数据库,并且导入nacos-mysql.sql的文件(路径是/conf/nacos-mysql.sql)

在这里插入图片描述

在Nacos的conf/application.properties文件中添加mysql数据源支持

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql	# 添加mysql数据源

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root		# 数据库账号
db.password.0=123456	# 密码

重启下nacos,登录进入后,发现我们刚刚测试的那些数据都不在了,这就是不做持久化的问题。

现在已经将数据的持久化加上了,我们像刚刚一样随便添加几个数据,然后再次重启nacos,看看数据有没有丢失。

在这里插入图片描述

server:
  port: 9001
spring:
  application:
    name: consumer # 应用名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
      config:
        server-addr: localhost:8848 # nacos地址
        file-extension: yml # 指定配置内容的数据格式

  profiles:
    active: dev

调试:

D:\springcloud\doc>curl localhost:9001/getConfig
nacos config dev

重启nacos,可以看到我们的数据都还在

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CVB6CGNJ-1690076592178)(../imgs1/16.png)]

nacos的配置扩展

除了通过${prefix}-${spring.profiles.active}.${file-extension}的方式指定我们的配置文件,我们还可以直接通过dataId配置指定nacos上的一些共享配置

如创建了一个redis的共享配置

在这里插入图片描述

在java项目中不仅要读取consumer-dev.yml还要读取redis.yml的配置,可以使用extension-configs来声明

server:
  port: 9001
spring:
  application:
    name: consumer # 应用名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
      config:
        server-addr: localhost:8848 # nacos地址
        file-extension: yml # 指定配置内容的数据格式
        extension-configs:
          -
            dataId: redis.yml
            group: DEFAULT_GROUP
            refresh: true

  profiles:
    active: dev

extension-configs是一个数组,extension-configs中若有多个配置时

extension-configs:
  -
    dataId: redis.yml
    group: DEFAULT_GROUP
    refresh: true
  -
    dataId: rabbitmq.yml
    group: DEFAULT_GROUP
    refresh: true

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

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

相关文章

zookeeper的应用

Zookeeper的配置文件解析: Zookeeper内部原理: 选举机制 半数机制:在集群环境中半数以上的机器存活,这个集群可用,所以在设计Zookeeper集群系统时&#xff0c;通常会选择 奇数台服务器来搭建Zookeeper的集群 虽然在配置文件中并没有指定Master和Slave。但是&#xff0c;Zookeep…

家政服务小程序制作攻略揭秘

想要打造一个家政服务小程序&#xff0c;但是又不懂编程和设计&#xff1f;不用担心&#xff01;下面将为你详细介绍如何利用第三方平台&#xff0c;从零开始打造一个家政服务小程序。 首先&#xff0c;你需要找到一个适合的第三方平台&#xff0c;例如乔拓云网。在乔拓云网的【…

LiveGBS流媒体平台GB/T28181常见问题-token有效期是多久如何设置token有效期有效时间接口调用token的有效时长

LiveGBS常见问题如何设置TOKEN有效时间接口调用token的有效时长 1、TOKEN有效期2、默认token有效期3、配置token_key4、如何配置一直有效的token5、动态有效期6、搭建GB28181视频直播平台 1、TOKEN有效期 调用登陆接口后&#xff0c;会获得一个token&#xff0c;默认的有效期是…

【NLP】BERT,BART和T5等LLM模型的比较

一、介绍 在这篇博文中&#xff0c;我将讨论像BERT&#xff0c;BART和T5这样的大型语言模型。到2020年&#xff0c;LLM领域取得的主要进展包括这些模型的开发。BERT和T5由Google开发&#xff0c;BART由Meta开发。我将根据这些模型的发布日期依次介绍这些模型的详细信息。在之前…

AlSD 系列智能安全配电装置是安科瑞电气有限公司专门为低压配电侧开发的一款智能安全用电产 品-安科瑞黄安南

一、应用背景 电力作为一种清洁能源&#xff0c;给人们带来了舒适、便捷的电气化生活。与此同时&#xff0c;由于使用不当&#xff0c;维护 不及时等原因引发的漏电触电和电气火灾事故&#xff0c;也给人们的生命和财产带来了巨大的威胁和损失。 为了防止低压配电系统发生漏…

Yarn与Zookeeper学习

YARN学习 1.YARN是什么&#xff1f; yarn 分配运行资源 mapReduce的运行平台 2.YARN运行过程&#xff1a; 客户端与ResourceManager交互&#xff0c;生成临时配置文件(Application)ResourceManager根据Application信息生成Task然后生成MapReduceApplicationMaster(简称AM)AM…

STN:Spatial Transformer Networks

1.Abstract 卷积神经网络缺乏对输入数据保持空间不变的能力&#xff0c;导致模型性能下降。作者提出了一种新的可学习模块&#xff0c;STN。这个可微模块可以插入现有的卷积结构中&#xff0c;使神经网络能够根据特征图像本身&#xff0c;主动地对特征图像进行空间变换&#x…

前端图标解决方案

1. 前言 随着 Web 技术的发展与日益丰富的界面需求&#xff0c;图标逐渐成为前端开发中不可或缺的一部分&#xff0c;为此也诞生了各种各样的解决方案。文章总结及分析了目前常见的一些图标解决方案。 2. CSS 背景图片 2.1 background-image 图标本质上也是图片&#xff0c…

人才公寓水电表改造解决方案

随着社会经济的不断发展&#xff0c;人才公寓作为吸引和留住人才的重要配套设施&#xff0c;其水电表改造问题越来越受到人们的关注。本文将从以下几个方面探讨人才公寓水电表改造解决方案。 一、现状分析 目前&#xff0c;人才公寓的水电表普遍存在以下几个问题&#xff1a; …

科技资讯|苹果计划本月推出Vision Pro头显开发套件,电池有重大更新

根据消息源 aaronp613 分享的信息&#xff0c;苹果计划本月底面向开发者&#xff0c;发布 Vision Pro 头显开发套件。消息源还指出苹果更新了 Vision Pro 头显电池组的代号&#xff0c;共有 A2781&#xff0c;A2988 和 A2697 三种不同的型号&#xff0c;目前尚不清楚三者之间的…

【iOS】多界面传值

文章目录 前言一、属性传值二、协议传值三、block传值四、KVO传值五、KVO的自动触发与手动触发六、通知传值总结 前言 在写网易云音乐以及3GShare包括后面的学生管理系统时&#xff0c;用到许多界面传值方法&#xff0c;特撰写博客记录目前学过的几种多界面传值方法 一、属性…

了解Unity编辑器之组件篇Video(二)

Video Player组件&#xff1a;用于在游戏中播放视频的组件。它提供了一系列属性来控制视频的播放、显示和交互。 1.Source&#xff08;视频源&#xff09;&#xff1a;用于指定视频的来源。可以选择两种不同的视频源类型&#xff1a; &#xff08;1&#xff09;Vieo Clip&#…

STM32 点灯实现 7.18

嵌入式&#xff1a; 以应用为中心&#xff0c;以专用计算机为基础&#xff0c;软硬件可裁剪ARM A系列芯片&#xff1a;高端芯片&#xff0c;实现人机互动 R系列&#xff1a;实现时效性 M系列&#xff1a;低端芯片&#xff0c;控制硬件设备&#xff0c;灯&#xff0c;风扇....…

设备监测诊断与维护:优化工业生产效率的关键措施

在现代工业生产中&#xff0c;设备的稳定运行对于保障生产效率至关重要。设备监测、诊断和维护作为关键措施&#xff0c;能够帮助企业及时发现设备问题、诊断故障原因&#xff0c;并采取有效维护措施&#xff0c;从而降低生产中断风险&#xff0c;提高生产效率。本文将深入探讨…

Verilog 学习之路二——基础学习总结(摘取自菜鸟教程)

目录 1 Verilog 设计方法2. 基础语法2.1 格式2.2 数值表示数值种类表示方法 2.3 数据类型2.4 表达式 3. 编译指令4. 连续赋值5. 过程结构6 过程赋值7 时序控制8 语句块9 循环10 函数例子-数码管译码 1 Verilog 设计方法 Verilog 的设计多采用自上而下的设计方法&#xff08;to…

平台化的测试工具推荐|一站式测试平台RunnerGo

互联网行业的发展到今天越来越多的公司更加注重工作效率和团队协作&#xff0c;越来越多的产品也趋于平台化&#xff0c;平台化也更有利于提高团队效率&#xff0c;代码管理、持续构建、持续部署这些工具的发展都是非常超前的&#xff0c;它们对于团队协作的支持和工作效率的提…

vue中如何通过webpack-bundle-analyzer打包分析工具进行配置优化

vue中随着项目的不断功能迭代和开发&#xff0c;项目文件越来越多&#xff0c;项目的打包文件也越来越大。如何对打包文件进行分析优化&#xff0c;减小打包文件大小呢&#xff1f;可以通过webpack-bundle-analyzer 这个打包分析工具进行解决。 1、webpack-bundle-analyzer的安…

接口漏洞-WebService-wsdl+SOAP-Swagger+HTTP-WebPack

什么是接口&#xff1f; 接口就是位于复杂系统之上并且能简化你的任务&#xff0c;它就像一个中间人让你不需要了解详细的所有细节。像谷歌搜索系统&#xff0c;它提供了搜索接口&#xff0c;简化了你的搜索任务。再像用户登录页面&#xff0c;我们只需要调用我们的登录接口&am…

【go语言学习笔记】02 Go语言高效并发

文章目录 一、并发基础1. 协程&#xff08;Goroutine&#xff09;2. Channel2.1 声明2.2 无缓冲 channel2.3 有缓冲 channel2.4 关闭 channel2.5 单向 channel2.6 selectchannel 示例 二、同步原语1. 资源竞争2. 同步原语2.1 sync.Mutex2.2 sync.RWMutex2.3 sync.WaitGroup2.4 …

TypeError: can‘t convert np.ndarray of type numpy.object_.

在处理数据集的时候出现报错&#xff1a; TypeError: can’t convert np.ndarray of type numpy.object_. The only supported types are: float64, float32, float16, complex64, complex128, int64, int32, int16, int8, uint8, and bool. train_labels torch.tensor(train…