SpringBoot 3.2.4整合Nacos详细流程

1 引入依赖

<properties>
	<spring-boot.version>3.2.4</spring-boot.version>
</properties>
<dependencies>
	<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>
</dependencies>
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-dependencies</artifactId>
			<version>${spring-boot.version}</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>${spring-cloud.version}</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-alibaba-dependencies</artifactId>
			<version>2023.0.1.0</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

2 项目启动类新增注解 @EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
public class SbcPortalApplication {

    public static void main(String[] args) {
        SpringApplication.run(SbcPortalApplication.class, args);
    }

}

3 resources 目录下只保留 bootstrap.yml

spring:
  application:
    name: ${app_name:${APP_NAME:sbc-portal}}
#  profiles:
#    active: ${profiles_active:${PROFILES_ACTIVE:stg}}
  main:
    allow-circular-references: true
  cloud:
    nacos:
      username: ${config_username:${CONFIG_USERNAME:nacos}}
      password: ${config_password:${CONFIG_PASSWORD:nacos}}
      discovery:
        server-addr: ${config_server_uri:${CONFIG_SERVER_URI:10.244.36.167:8848}}
        namespace: ${config_profiles_active:${CONFIG_PROFILES_ACTIVE:msdev4}}
        group: DEFAULT_GROUP
        service: ${spring.application.name}
      config:
        server-addr: ${config_server_uri:${CONFIG_SERVER_URI:10.244.36.167:8848}}
        file-extension: yml
        namespace: ${config_profiles_active:${CONFIG_PROFILES_ACTIVE:msdev4}}
        group: DEFAULT_GROUP

4 登录 nacos 管理台 新增配置。用户名密码:nacos/nacos

在 Nacos 中,最常见且推荐的方式来区分不同环境的配置是通过 Data ID。然而,命名空间Group 也经常被用来辅助管理和组织配置。这三种方式各有其特点和适用场景,但 Data ID 是最直接且广泛使用的方法。

1. Data ID

data id 命名为 

${spring.application.name}-dev.yml 

${spring.application.name}-prod.yml 

可以根据不同环境创建不同的yml文件

在bootstrap.yml中通过 spring.profiles.active 指定

spring:
  profiles:
    active: ${profiles_active:${PROFILES_ACTIVE:stg}}

为什么是最常见的方法?

  • 灵活性高:每个环境可以拥有独立的 Data ID,如 your-service-name-dev.yamlyour-service-name-test.yaml 和 your-service-name-prod.yaml。这种方式与 Spring Boot 的多环境配置机制无缝配合。
  • 易于理解:开发者可以根据 Data ID 名称直观地判断配置所属的环境。
  • 便于维护:不同的 Data ID 可以分别管理,更新一个环境的配置不会影响其他环境。
示例
spring:
  application:
    name: your-service-name # 应用名称
  profiles:
    active: dev # 指定活动的profile,默认为dev,可以根据需要切换到其他环境
  cloud:
    nacos:
      config:
        server-addr: 10.244.36.167:8848 # Nacos Server 地址
        file-extension: yaml # 指定配置文件格式为YAML或properties

2. 命名空间 (Namespace)

data id 命名为 ${spring.application.name}.yml

何时使用?

  • 隔离性强:当您希望完全隔离不同环境的配置,避免任何可能的冲突时,可以为每个环境创建独立的命名空间。
  • 多租户支持:对于大型组织或多个团队共用一个 Nacos 实例的情况,命名空间可以作为逻辑上的“租户”来划分配置。
示例
  • 开发环境:dev
  • 测试环境:test
  • 生产环境:prod

在 Nacos 控制台中创建相应的命名空间,并确保应用程序根据当前环境选择正确的命名空间。

3. Group

何时使用?

  • 分类清晰:如果您有大量配置项并且希望按照业务模块或功能区域进行分类,可以使用 Group 来组织这些配置。
  • 简化管理:Group 可以帮助将配置项分组,使得管理和查找更加方便。
示例
  • COMMON_GROUP:存放通用配置,如数据库连接池设置、日志级别等。
  • SERVICE_GROUP:存放服务特定的配置,如 REST API 路径、第三方服务地址等。

综合建议

虽然 Data ID 是最常见的方式,但在实际应用中,通常会结合 命名空间Group 来达到最佳效果:

  • Data ID:用于区分不同环境的配置文件。
  • 命名空间:用于隔离不同环境或项目的配置,避免冲突。
  • Group:用于对配置项进行分类和管理,提高可读性和维护性。
最佳实践组合
  • 开发环境your-service-name-dev.yaml,命名空间 dev,Group DEFAULT_GROUP 或 DEV_GROUP
  • 测试环境your-service-name-test.yaml,命名空间 test,Group DEFAULT_GROUP 或 TEST_GROUP
  • 生产环境your-service-name-prod.yaml,命名空间 prod,Group DEFAULT_GROUP 或 PROD_GROUP

总结

  • 最常见的方式:Data ID 是最常见的区分不同环境的方法,因为它简单直接且易于理解和维护。
  • 综合使用:结合命名空间和 Group 可以提供更强大的配置管理和组织能力,满足复杂的业务需求。

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

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

相关文章

前端小案例——网页井字棋

前言&#xff1a;我们在学习完了HTML、CSS和JavaScript之后&#xff0c;就会想着使用这三个东西去做一些小案例&#xff0c;不过又没有什么好的案例让我们去练手&#xff0c;本篇文章就提供里一个案例——网页井字棋。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可…

Leetcode 983. 最低票价 动态规划

原题链接&#xff1a;Leetcode 983. 最低票价 class Solution { public:int mincostTickets(vector<int>& days, vector<int>& costs) {int n days.size();int last days[n - 1];int dp[last 1];map<int, int> mp;for (auto x : days)mp[x] 1;dp…

Java中的 锁现象演示和原理解释 多线程操作资源类 八种案例 同步方法 静态方法 对象锁 类锁

目录 面试题 案例 1 标准访问有 ab 两个线程 案例 2 其中一个同步方法暂停 3 秒 案例 3 新增普通方法 案例 4 创建两个对象 案例 5 两个静态同步方法 一个对象 案例 6 两个静态同步方法 两个对象 案例 7 一个静态同步方法 一个普通同步方法 一个对象 案例 8 一个静态同…

HTML应用指南:利用GET请求获取全国特斯拉充电桩位置

随着电动汽车的普及&#xff0c;充电基础设施的建设变得至关重要。作为电动汽车领域的先驱&#xff0c;特斯拉不仅在车辆技术创新上持续领先&#xff0c;还积极构建广泛的充电网络&#xff0c;以支持其不断增长的用户群体。为了提升用户体验和服务质量&#xff0c;开发人员和数…

cuda + cudnn安装

1.安装CUDA Toolkit 在设备管理器&#xff08;此电脑–右键–属性&#xff09;的显示适配器中可以查看自己的显卡型号&#xff0c;去下载对应的CUDA Toolkit 。或者输入以下命令查看Driver Version &#xff0c;cuda Version&#xff1a;12.2代表12.2版本以下兼容可以进行安装 …

【k8s面试题2025】1、练气期

主要通过呼吸吐纳等方法&#xff0c;将外界的天地灵气吸入体内&#xff0c;初步改造身体&#xff0c;使身体素质远超常人。 文章目录 docker 和虚拟机的不同Kubernetes 和 docker 的关系Kube-proxy IPVS 和 iptables 的异同蓝绿发布Kubernetes中常见的数据持久化方式关于 Docke…

vue | 插值表达式

Vue 是一个用于 构建用户界面 的 渐进式 框架 1. 构建用户界面&#xff1a;基于 数据 动态 渲染 页面 2. 渐进式&#xff1a;循序渐进的学习 3. 框架&#xff1a;一套完整的项目解决方案&#xff0c;提升开发效率↑ (理解记忆规则) 插值表达式&#xff1a; 插值表达式是一种 Vu…

【蜂巢——方向,数学】

题目 代码 #include <bits/stdc.h> using namespace std; using ll long long; int dx[6] {-1, -1, 0, 1, 1, 0}; int dy[6] {0, 1, 1, 0, -1, -1}; void cal(int d, int p, int q, int& x, int& y) {x p * dx[d];y p * dy[d];d (d 2) % 6;x q * dx[d];…

C语言进阶习题【1】指针和数组(1)——一维数组

1. 数组名的意义&#xff1a; sizeof(数组名)&#xff0c;这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小。&数组名&#xff0c;这里的数组名表示整个数组&#xff0c;取出的是整个数组的地址。除此之外所有的数组名都表示首元素的地址。&#xff08;一维数…

禁用输入法的方案

车间运行的SF系统&#xff0c;扫描产品条码。WB输入法等工具流氓软件&#xff0c;文本框获得焦点之后&#xff0c;自动打开输入状态&#xff0c;美其名日&#xff0c;智能化。输入法open状态下&#xff0c;扫描条码是乱码的&#xff0c;或是不全&#xff0c;缺字符。分析是输入…

Linux提权-02 sudo提权

文章目录 1. sudo 提权原理1.1 原理1.2 sudo文件配置 2. 提权利用方式2.1 sudo权限分配不当2.2 sudo脚本篡改2.3 sudo脚本参数利用2.4 sudo绕过路径执行2.5 sudo LD_PRELOAD环境变量2.6 sudo caching2.7 sudo令牌进程注入 3. 参考 1. sudo 提权原理 1.1 原理 sudo是一个用于在…

3. 后端验证前端Token

书接上回&#xff0c;后端将token返回给前端&#xff0c;前端存入cookie&#xff0c;每次前端给后端发送请求&#xff0c;后端是如何验证的。 若依是用过滤器来实现对请求的验证&#xff0c;过滤器的简单理解是每次发送请求的时候先发送给过滤器执行逻辑判断以及处理&#xff0…

【转】厚植根基,同启新程!一文回顾 2024 OpenHarmony 社区年度工作会议精彩瞬间

在数字化浪潮奔腾不息的今天&#xff0c;开源技术已成为推动科技创新与产业发展的强大引擎。2025年1月10日-11日&#xff0c;OpenAtom OpenHarmony&#xff08;开放原子开源鸿蒙&#xff0c;以下简称“OpenHarmony”或“开源鸿蒙”&#xff09;社区2024年度工作会议于深圳盛大启…

数据结构(Java版)第九期:LinkedList与链表(四)

专栏&#xff1a;数据结构(Java版) 个人主页&#xff1a;手握风云 目录 一、LinkedList的模拟实现 1.1. 头插法 1.2. 尾插法 1.3. 插入中间节点 1.4. 删除某个节点 1.5. 删除所有为key的元素 二、LinkedList的使用 2.1. 什么是LinkedList 2.2. LinkedList的使⽤ 三、…

第22篇 基于ARM A9处理器用汇编语言实现中断<四>

Q&#xff1a;怎样编写ARM A9处理器汇编语言代码配置使用按键和定时器中断&#xff1f; A&#xff1a;本次实验同样为中断模式和监督模式都设置ARM A9堆栈指针&#xff0c;并使能中断&#xff0c;此外在主程序中调用子程序CONFIG_HPS_TIMER和CONFIG_KEYS分别对HPS Timer 0&…

Python学习(十三)什么是模块、模块的引入、自定义模块、常见的内置模块(math、random、os、sys、uuid、时间模块、加密模块)

目录 一、什么是模块&#xff1f;1.1 定义1.2 分类1.3 五种模块引入的方法1&#xff09;import 模块名&#xff08;全部引入&#xff09;2&#xff09;from 模块名 import 功能名&#xff08;部分引入&#xff09;3&#xff09;from 模块名 import *&#xff08;引入公共功能&a…

宝塔php7.4安装报错,无法安装,php8以上可以安装,以下的不行,gd库什么的都正常

宝塔的依赖问题导致的问题&#xff0c;最后手动挂载后才解决。。。废了三天三夜终于搞好了。。。。无语&#xff5e; 建议&#xff1a;不要一直升级宝塔版本&#xff0c;升级前备份或者开服务商的实例镜像&#xff0c;方便恢复&#xff0c;不然&#xff0c;可就GG了&#xff5…

C语言:-三子棋游戏代码:分支-循环-数组-函数集合

思路分析&#xff1a; 1、写菜单 2、菜单之后进入游戏的操作 3、写函数 实现游戏 3.1、初始化棋盘函数&#xff0c;使数组元素都为空格 3.2、打印棋盘 棋盘的大概样子 3.3、玩家出棋 3.3.1、限制玩家要下的坐标位置 3.3.2、判断玩家要下的位置是否由棋子 3.4、电脑出棋 3.4.1、…

flutter的web页面

有几个服务器 有几个后台 直接通过web端进去虽然说很方便&#xff0c;但… 于是把web页面镶嵌到应用里面去&#xff0c; 这样就换了个方式打开web页面了 比如这里有有个列表 这里是写死了&#xff0c;活的列表可以通过io去获取 import package:flutter/material.dart; imp…

K8S 亲和性与反亲和性 深度好文

今天我们来实验 pod 亲和性。官网描述如下&#xff1a; 假设有如下三个节点的 K8S 集群&#xff1a; k8s31master 是控制节点 k8s31node1、k8s31node2 是工作节点 容器运行时是 containerd 一、镜像准备 1.1、镜像拉取 docker pull tomcat:8.5-jre8-alpine docker pull nginx…