【Java项目】从0到1完成Nacos配置文件扩展和共享

news2024/12/25 9:06:22

文章目录

  • 环境配置
  • 配置文件
  • 名称空间和组
  • 扩展配置
  • 共享配置文件
  • 配置文件优先级

使用nacos作用配置中心的好处在于我们可以在云端上修改配置文件之后,使得本地的配置重新生效,从而做到不用重启项目也可以加载新的配置。

环境配置

首先引入依赖,我们知道,SpringBoot的版本和SpringCloud以及SpringCloudAlibaba的版本是有对应关系的,也就是使用对应的关系,能减少bug的出现。
下面配置文件中的前三行我先列出了我的版本。
配置完毕版本之后,首先需要引入Spring-boot-starter-web,否则使用Nacos将会失效。
然后,如果你的项目需要将服务注册到注册中心,那么就需要引入discovery这个依赖,他是服务发现依赖,而如果你不需要进行服务注册,则不需要引入这个依赖。
config这个依赖则是使用nacos的配置中心,所以这个依赖我们需要引入。

		<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
        <spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>

        <!-- Spring BootSpring Web MVC 集成 -->
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
 	   <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

配置文件

#微服务配置
spring:
  application:
    name: towelove
  cloud:
    nacos:
      server-addr: 192.168.146.114:8848
      discovery: # 开启服务发现
        namespace: 默认public
        group: 默认为DEFAULT_GROUP
      config: # 开启配置中心
        namespace: 默认public
        group: 默认为DEFAULT_GROUP
        file-extension: yaml # 配置文件类型
        refresh-enabled: true # 开启动态刷新
  #profiles默认为dev
  profiles:
    active: dev

上面的代码比较好理解,spring.application.name是必须的,他代表了这个服务的服务名称,spring.profiles.active就是你的开发环境,比如dev开发,prod生产,test测试环境。

到目前位置我们看上去好像没有映入任何的配置文件对吗?

其实不是的,Nacos默认此时已经去寻找了一个dataId如下的配置文件:

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

prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。

spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,
dataId 的拼接格式变成{prefix}-{file-extension}

file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

所以,以上面的为例,此时这个服务一旦启动,就会先去配置中心中查找一个叫做
towelove-dev.yaml的配置文件。如果找到了就加载,没找到就不加载。

到此为止,我们已经简单的完成了一个服务的注册,下面我们讲解一下比较重要的概念。

名称空间和组

我们还需要知道nacos如何去定位一个具体的配置文件,即配置的三要素:namespace、group、dataid.

1、通过namespace、group找到具体的环境和具体的项目。
2、通过dataid找到具体的配置文件,dataid有三部分组成,
比如:towelove-dev.yaml配置文件 由(towelove)-(dev). (yaml)三部分组成

towelove:第一部分,它是在application.yaml中配置的应用名,即spring.application.name的值。

dev:第二部分,它是环境名,通过spring.profiles.active指定,

Yaml: 第三部分,它是配置文件 的后缀,目前nacos支持properties、yaml等格式类型,本项目选择yaml格式类型。

所以,如果我们要配置towelove工程的配置文件:
在开发环境中配置towelove-dev.yaml
在测试环境中配置towelove-test.yaml
在生产环境中配置towelove-prod.yaml

namespace和group
namespace:用于区分环境、比如:开发环境、测试环境、生产环境。
group:用于区分项目,比如:towelove项目、towelove2.0项目

我们可以创建一个名称空间,比如我们创建一个dev开发环境,注意,这里的dataId一定要自己去填写,不然你就得在上面配置文件的地方自己复制过来她随机给你生成的dataId了!!
在这里插入图片描述
创建完毕名称空间之后,我们就可以在对应的名称空间下创建配置文件了。
当然,我这个项目并没有用到towelove-dev.yaml这个配置文件,我不太需要。因为我想尽可能确保见面知意。
在这里插入图片描述
上面我们已经说过,默认的group和namespace不定义的话,使用的就是DEFAULT_GROUP和默认的这个public这个namespace。当然,对于新手来说这样子最友好。
不过我们也可以简单的配置一下。也不难,如下:
对于group,你填写好你自己设定的group即可,
对于dataId,要注意的是一定要记得自己加上文件的后缀哦,如图。
在这里插入图片描述

在这里插入图片描述
上面的这张图片表示会选择namespace为dev,并且组为towelove-group的配置文件。

扩展配置

上面我们说过,一个服务启动的时候,默认会去寻找
$ {prefix}-$ {spring.profiles.active}.${file-extension}这个配置文件。
但是,作为SpringCloud项目,我们很可能会需要去引入其他模块的配置文件。
例如我的项目就是,controller层单独放了一个包,也就是提供API接口,而service以及下层,都放在另一个叫做service的包中,这样子,我就可以做到独立开发两个模块的功能了。

那么其实我们知道,controller层不再需要再一次引入mysql的配置,而只需要在service包中引入,因为我们的数据库操作都是在service完成开发和测试的,那么,service包中就会需要用到mysql的配置,而controller在启动的时候也需要。
那么,我们就可以让controller这个包去引入service的服务,同时他也会吧service包的配置文件一起读过来。
那么我们此时就可以让controller这个服务去扩展service的配置文件。
在这里插入图片描述
这个时候,只需要在towelove-service-dev.yaml中引入mysql的配置,那么我在做service的接口开发的时候能够成功,controller这个项目他也能成功运行。

共享配置文件

可以在上面的图中看到我用了一个shared-configs,他代表的其实就是多个项目之间都共同使用的一些配置文件。
比如,redis,rocketmq啊这些配置文件,他们都是共享的,那么我就可以使用共享配置文件的方式来引入他们。
这样子我就不需要重复编写配置文件了。

配置文件优先级

刚才说了dataid第一部分就是spring.application.name,nacos 客户端要根据此值确定配置文件 名称,所以spring.application.name不在nacos中配置,而是要在工程的本地进行配置。
本地配置文件现在是application.yaml需要修改为bootstrap.yaml,因为SpringBoot读取配置文件 的顺序如下:
在这里插入图片描述
因此,我们如果想要吧服务注册到Nacos,我们需要在bootstrap中配置nacos的地址。
同时,如果说我们的配置文件他们有相同的属性怎么办?谁的优先级更高?
我们引入配置文件的方式有:
1:以项目应用名引入
2:以扩展配置文件方式引入
3:以共享配置文件方式引入
4:本地配置文件
那么这些配置文件的优先级如下:
以项目应用名引入 > 以扩展配置文件方式引入 > 以共享配置文件方式引入 > 本地配置文件

如果本地优先级这么低的话,会让我们如果要启动多个服务的时候,不好修改端口,所以我们可以编写如下配置
spring.cloud.config.override-none=true
也就是关闭覆盖功能,这样子就能使得本地的配置文件不被覆盖

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【基础知识整理】图的基本概念 邻接矩阵 邻接表

一、图概述 定义&#xff1a; 图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的&#xff1b; 其中&#xff0c;点通常被成为"顶点(vertex)“&#xff0c;而点与点之间的连线则被成为"边或弧”(edege)。 通常记为&#xff0c;G(V,E)。 图是一种重要的…

ANR中为什么会出现堆栈漂移

前言 我们排查ANR问题的时候&#xff0c;会发现有时候anr文件中捕获的堆栈信息&#xff0c;并不准确&#xff0c;而且经常会打印下面这样的堆栈&#xff1a; "main" prio5 tid1 Native| group"main" sCount1 ucsCount0 flags1 obj0x71ac6f78 self0xb4000…

java+mysql校园外卖订餐管理系统servlet

3.1 课题目的 对于客户而言&#xff0c;外卖订单管理系统最好是越方便操作&#xff0c;越简单越好。客户对于外卖订单系统&#xff0c;对他的首要要求就是能够安全&#xff0c;顺利的完成订单。但是很多时候开发人员更在意一些创新的模式&#xff0c;去增加用户的体验感或增值服…

关于变邻域搜索求解柔性作业车间问题的探讨

邻域结构交换内部关键块的操作 譬如&#xff0c;某案例的内部关键块为501—601—502—701&#xff0c;部分OS加工顺序码如下(标注的黄色底纹&#xff1a;为内部关键块) 在移动内部关键快操作时&#xff0c;请教各位是否是如下的变换&#xff1a; ① 块尾701 移至 块内工序50…

vs Git 本地服务器仓库配置

1、安装Git程序 Git 下载地址一https://git-scm.com/download/winGit 下载地址二We bring the awesome Git VCS to Windowshttps://gitforwindows.org/ 2、新建本地服务端仓库 2.1、新建文件夹&#xff0c;并创建仓库 在本地新建文件夹&#xff1a;//本地服务器仓库 在服务…

Vue+SpringBoot打造电子元器件管理系统(附源码文档)

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲师&#xff0c;全栈领域优质创作者。 一、摘要…

SSRS rdlc报表 七 安装及配置报表服务

开发环境 vs2022 sqlserver 2019 参考文档&#xff1a;安装 SQL Server Reporting Services - SQL Server Reporting Services (SSRS) | Microsoft Learn 配置 URL (Configuration Manager) - SQL Server Reporting Services (SSRS) | Microsoft Learn 如果你在安装数据库的…

基于html+css的图展示114

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

chatgpt赋能python:Python与Kafka的对接方法介绍

Python与Kafka的对接方法介绍 Kafka作为一种高吞吐量的分布式消息系统&#xff0c;近年来在数据处理、大数据分析以及实时流计算等领域得到了广泛的应用&#xff0c;成为了数据处理和分析领域中的标配。而Python作为一种简单易学、功能强大的编程语言&#xff0c;也因其在数据…

学习WooCommerce跨境电商社交媒体营销

WooCommerce 长期以来一直为电子商务店主提供多样化的服务。大约 500 万家商店啓用安装了免费的 WooCommerce 插件。 官方 WooCommerce 插件从 WordPress.org 下载了161,908,802次&#xff0c;并且还在增加。 超过5,106,506 个网站正在使用 WooCommerce。 本文网址: https…

pytorch相关报错【报错】

AttributeError: cannot assign module before Module.init() call 原因&#xff1a;自定义类中缺少supre()函数 解决 KeyError: tensor(1) 报错原因&#xff1a;tensor不能作为字典的键 解决&#xff1a;转化为numpy x torch.tensor([1,2,3]) y {1:1,2:2,3:3} z [y[i]…

提交arxiv的格式调整与流程

提交arxiv的格式调整与流程 进入arxiv网站&#xff08;注册或登录&#xff09;: https://arxiv.org/ 点击发布submission 上传本地资源&#xff0c;完成以下步骤&#xff1a; 许可证一般需要选&#xff1a; 这个表示最小的利益冲突&#xff0c;因为我们最后肯定希望publi…

如何在项目中优雅的抛出异常,这些知识佬们还记得嘛

前言&#xff1a; 本篇文章主要讲解Java中的几种异常关键字和异常类相关知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出&#xff0c;对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了&#x1f601; 以…

lua编程——air724二次开发之点亮led教程

一.硬件 硬件型号&#xff1a;银尔达 Core-Air724模块&#xff1b; 杜邦线若干&#xff1b; micro Usb线&#xff1b; USB转TTL工具&#xff1b; 杜邦线用于电源(12V/1A)和TTL信号连接&#xff0c;micro Usb用于下载和调试。 硬件资源&#xff0c;如下图&#xff1a; 二.软件 u…

❤️最详细的Python学习路线-图文不废话

当谈论学习Python编程时&#xff0c;有许多不同的途径和资源可供选择。为了帮助你建立起一个学习Python的有效路线&#xff0c;下面是一个包含基本步骤和关键资源的建议。请注意&#xff0c;这只是一个指南&#xff0c;你可以根据自己的兴趣和学习风格进行调整。 ❝ 以下时间不…

推荐对象转换解决方案:MapStruct

1、什么是MapStruct 1.1 JavaBean 的困扰 对于代码中 JavaBean之间的转换&#xff0c; 一直是困扰我很久的事情。在开发的时候我看到业务代码之间有很多的 JavaBean 之间的相互转化&#xff0c; 非常的影响观感&#xff0c;却又不得不存在。我后来想的一个办法就是通过反射&a…

Django新手必看:从入门到精通Web应用开发①【文末送书三本】

Django新手必看&#xff1a;从入门到精通Web应用开发① 1. Django是什么1.2 Django的由来1.3 Django的命名1.4 Django的版本发布1.5 Django框架的特点 2 Django的设计模式2.1 MVC设计模式2.2 MTV设计模式 3 Django安装与配置3.1 Python支持版本&#xff1a;3.2 Django 3.2与4.1…

Filter设计模式,责任链模式一如既往的妙

场景1&#xff1a; 每种Filter进行某种处理&#xff0c;将各个Filter连在一起形成一个FilterChain。当需要往FilterChain中加入新的Filter&#xff0c;或者改变各个Filter的处理顺序时&#xff0c;可以方便的扩展。 1个接口&#xff1a; public interface Filter {public Str…

前端技术搭建拼图小游戏(内含源码)

The sand accumulates to form a pagoda ✨ 写在前面✨ 功能介绍✨ 页面搭建✨ 样式设置✨ 逻辑部分 ✨ 写在前面 上周我们实通过前端基础实现了俄罗斯方块游戏&#xff0c;今天还是继续按照我们原定的节奏来带领大家完成一个拼图游戏&#xff0c;功能也比较简单简单&#xff…

chatgpt赋能python:Python数组:如何使用Python将数据存入数组中

Python数组&#xff1a;如何使用Python将数据存入数组中 Python是一个非常强大的高级编程语言&#xff0c;在人工智能、数据科学和机器学习等领域有广泛应用。Python允许将数据存储在不同的数据结构中&#xff0c;其中&#xff0c;数组是最常用的。 在这篇文章中&#xff0c;…