微服务架构 | nacos - [标准化接入: springboot]

INDEX

      • §1 依赖
      • §2 基础配置
      • §3 静态、动态引用
        • §3.1 `@Value` 静态引用
        • §3.2 `@NacosValue` 动态引用
        • §3.3 `@ConfigurationProperties` 静态引用
        • §3.4 `@NacosConfigurationProperties` 动态引用
      • §4 多配置文件

§1 依赖

父 pom

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.7.RELEASE</version>
</parent><!-- 加入版本管理 -->
<properties><nacos-version>0.2.7</nacos-version>
</properties>
<dependencyManagement><dependencies><dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-config-spring-boot-starter</artifactId><version>${nacos-version}</version></dependency></dependencies>
</dependencyManagement>

子 pom

<!-- 实装引入 -->
<dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-config-spring-boot-starter</artifactId>
</dependency>

§2 基础配置

### 强烈建议:spring 系的项目,都显示的定义 spring.application.name
### 尤其是 spring cloud 项目
spring.application.name=sdbc-nacos-sb
### 重要,必要的配置
### springboot 下缺省或false,会报错【Could not resolve placeholder】
nacos.config.bootstrap.enable=true### nacos url
nacos.config.server-addr=192.168.32.3:8848
nacos.config.username=nacos
nacos.config.password=nacos### 必配
### 实测 springboot 下,不适用 ${prefix}-${spring.profiles.active}.${file-extension},这是 springcloud 的风格
### 命名空间、data-id、后缀必须显示的声明,使用 DEFAULT_GROUP 时,group 可以省略
nacos.config.namespace=sdbc
nacos.config.group=DEFAULT_GROUP
nacos.config.data-id=sdbc-nacos-sb.properties
nacos.config.type=properties

配置中缺少命名空间、data-id、后缀时,可能报如下异常

命名空间

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'sdbc.nacos.sb.a' in value "${sdbc.nacos.sb.a}"at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:178) ~[spring-core-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124) ~[spring-core-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:239) ~[spring-core-5.2.12.RELEASE.jar:5.2.12.RELEASE]

data-id

java.lang.NullPointerException: nullat com.alibaba.boot.nacos.config.util.NacosConfigLoader.reqNacosConfig(NacosConfigLoader.java:164) ~[nacos-config-spring-boot-autoconfigure-0.2.7.jar:0.2.7]at com.alibaba.boot.nacos.config.util.NacosConfigLoader.reqGlobalNacosConfig(NacosConfigLoader.java:127) ~[nacos-config-spring-boot-autoconfigure-0.2.7.jar:0.2.7]at com.alibaba.boot.nacos.config.util.NacosConfigLoader.loadConfig(NacosConfigLoader.java:67) ~[nacos-config-spring-boot-autoconfigure-0.2.7.jar:0.2.7]at com.alibaba.boot.nacos.config.autoconfigure.NacosConfigApplicationContextInitializer.initialize(NacosConfigApplicationContextInitializer.java:88) ~[nacos-config-spring-boot-autoconfigure-0.2.7.jar:0.2.7]at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:626) [spring-boot-2.3.7.RELEASE.jar:2.3.7.RELEASE]

后缀

java.lang.IllegalArgumentException: 'value' must not be nullat org.springframework.util.Assert.notNull(Assert.java:201) ~[spring-core-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:123) ~[spring-core-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:239) ~[spring-core-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.core.env.AbstractPropertyResolver.resolvePlaceholders(AbstractPropertyResolver.java:202) ~[spring-core-5.2.12.RELEASE.jar:5.2.12.RELEASE]at org.springframework.core.env.AbstractEnvironment.resolvePlaceholders(AbstractEnvironment.java:566) ~[spring-core-5.2.12.RELEASE.jar:5.2.12.RELEASE]at com.alibaba.boot.nacos.config.util.NacosConfigLoader.reqGlobalNacosConfig(NacosConfigLoader.java:118) ~[nacos-config-spring-boot-autoconfigure-0.2.7.jar:0.2.7]at com.alibaba.boot.nacos.config.util.NacosConfigLoader.loadConfig(NacosConfigLoader.java:67) ~[nacos-config-spring-boot-autoconfigure-0.2.7.jar:0.2.7]at com.alibaba.boot.nacos.config.autoconfigure.NacosConfigApplicationContextInitializer.initialize(NacosConfigApplicationContextInitializer.java:88) ~[nacos-config-spring-boot-autoconfigure-0.2.7.jar:0.2.7]at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:626) [spring-boot-2.3.7.RELEASE.jar:2.3.7.RELEASE]

§3 静态、动态引用

§3.1 @Value 静态引用
@Value("${sdbc.nacos.sb.a}")
private String a;
§3.2 @NacosValue 动态引用

配置追加 nacos.config.auto-refresh=true

@NacosValue(value = "${sdbc.nacos.sb.b}", autoRefreshed = true)
private String b;
§3.3 @ConfigurationProperties 静态引用

@ConfigurationProperties只是声明了模块化引用,还需要使模块化引用被spring扫描否则是不生效的

声明方式

@ConfigurationProperties(prefix = "sdbc.nacos.sc.l")
public class ModulizedConfig {private String x;private String y;
}

扫描方式
方式1:直接在声明处增加 @Component
方式2:使用 @Bean 的方式扫描

@Configuration
public class ModulizedActiveConfig {@Beanpublic ModulizedConfig modulizedConfig() {return new ModulizedConfig();}
}

方式3:使用 @EnableConfigurationProperties 扫描

@Configuration
@EnableConfigurationProperties(ModulizedConfig.class)
public class ModulizedActiveConfig {
}

当模块化配置没有被正确的扫描时,会按找不到 bean 报错

***************************
APPLICATION FAILED TO START
***************************Description:A component required a bean of type 'x.ModulizedConfig' that could not be found.
§3.4 @NacosConfigurationProperties 动态引用

配置追加 nacos.config.auto-refresh=true

@NacosConfigurationProperties只是声明了模块化引用,还需要使模块化引用被spring扫描否则是不生效的

声明方式

@NacosConfigurationProperties(dataId = "sdbc-nacos-sb.properties", prefix = "sdbc.nacos.sb.nl",autoRefreshed = true)
public class NacosModulizedConfig {private String x;private String y;
}

扫描方式
方式1:直接在声明处增加 @Component
方式2:使用 @Bean 的方式扫描

@Configuration
public class NacosModulizedActiveConfig {@Beanpublic NacosModulizedConfig nacosModulizedConfig() {return new NacosModulizedConfig();}
}

§4 多配置文件

data-ids
参考 基本配置,可以将 data-id 替换为 data-ids 以应用多配置文件(推荐,简单易懂)

nacos.config.namespace=sdbc
nacos.config.group=DEFAULT_GROUP
#nacos.config.data-id=sdbc-nacos-sb.properties
nacos.config.data-ids=sdbc-nacos-sb.properties,sdbc-nacos-sb-biz.properties,sdbc-nacos-sb-white.properties
nacos.config.type=properties

ext-config
如果需要引入不同的组,甚至命名空间不同,则需要引入 ext-config 配置

nacos.config.ext-config[0].data-id=sdbc-nacos-sb-xxl.properties
nacos.config.ext-config[0].group=JOB
nacos.config.ext-config[0].auto-refresh=true
nacos.config.ext-config[0].type=properties

需要注意

  • nacos.config.data-id 优先级更高,nacos.config.data-ids 会被 nacos.config.data-id 短路
    即如果同时配置了二者,则后者不生效导致报错,如 Could not resolve placeholder ‘muti.place.a’ in value “${muti.place.a}”
  • 必须配全了 nacos.config 后,才能配置 nacos.config.ext-config
    springboot 中,nacos.config 下配置都会加载进 NacosConfigProperties 对象,并在启动过程中强制检查参数
    因此,不配置nacos.config.namespace/group/data-id/type
    而是直接使用 ext-config,会启动失败报错,如 java.lang.IllegalArgumentException: ‘value’ must not be null

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

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

相关文章

免费PC游戏加速器--慕讯公益加速器

百度网盘链接&#xff1a; 慕讯公益加速器 提取码: y54m 官网&#xff1a; 慕讯公益加速器 优点&#xff1a; 1.不像其他加速器假免费&#xff0c;但支持的话可以向软件捐款 2.加速游戏很全&#xff08;Nikke等游戏都可以选择它&#xff09;&#xff0c;可以自由选择节点 …

git 常用命令大全

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、git是什么&#xff1f;二、工作中常用git命令集合三、部分git命令注意事项四、git reset 的五种模式五、总结 前言 git命令 其实不管是服务端还是前端&am…

【JAVA毕业设计】基于Vue和SpringBoot的校园资料分享平台

博主说明&#xff1a;本文项目编号 T 059 &#xff0c;文末自助获取源码 \color{red}{T059&#xff0c;文末自助获取源码} T059&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

typedef 与 extern 的结合:一场误解的澄清

typedef 与 extern 的结合:一场误解的澄清 一、typedef 的基本用法二、extern 的基本用法三、typedef 与 extern 的结合:一场误解的澄清示例二:使用 extern 声明外部变量示例三:错误的用法:尝试在 typedef 中使用 extern四、总结在C语言编程的世界里,typedef和extern是两…

腾讯的AI困局

科技新知 原创作者丨林书 编辑丨蕨影 2024年已经逐渐步入了尾声&#xff0c;但国产大模型的内卷之战却还在继续着…… 最近&#xff0c;腾讯终于有了新动作&#xff0c;在开源模型上卯足了劲。11 月 5 日&#xff0c;腾讯宣布开源 MoE 大语言模型混元 Large&#xff0c;腾讯称…

想部署一个自己的抖音,但是不会写代码怎么办? 部署一个自己的抖音系统

想部署一个自己的抖音,但是不会写代码怎么办? 看完这篇文章,你也快速拥有自己的抖音 上效果 安装教程 docker pull ghcr.io/zyronon/douyin-vue:latest docker run -d -p 10002:80 ghcr.io/zyronon/douyin-vue:latest 使用 浏览器打开ip:10002 然后就可以使用你自己的抖音…

QT之QString常用函数

1、构造函数 char类型可以直接通过构造函数构造QString&#xff0c;std::string不能直接作为参数构造QString对象&#xff0c;可以使用QString中的静态函数转换为QString: std::string stdstr"world"; QString str4QString::fromStdString(stdstr); 2、格式化构造(…

Dubbo源码解析(三)

一、Dubbo整合Spring启动流程 Dubbo的使用可以不依赖Spring&#xff0c;但是生产环境中Dubbo都是整合到Spring中一起使用&#xff0c;所以本章就解析Dubbo整合Spring的启动流程 一、传统的xml解析方式 一、Dubbo配置解析流程 在Java 中&#xff0c;一切皆对象。在JDK 中使用…

用两行命令快速搭建深度学习环境(Docker/torch2.5.1+cu118/命令行美化+插件),包含完整的 Docker 安装步骤

深度学习环境的配置过于繁琐&#xff0c;所以我制作了两个基础的镜像&#xff0c;希望可以帮助大家节省时间&#xff0c;你可以选择其中一种进行安装&#xff0c;版本说明&#xff1a; base 版本基于 pytorch/pytorch:2.5.1-cuda11.8-cudnn9-devel&#xff0c;默认 python 版本…

怎么在MindMaster里插入剪贴画?

使用MindMaster绘制思维导图时&#xff0c;可以通过插入剪贴画的方式&#xff0c;让整个思维导图更具表现力。思维导图软件提供大量极具设计感的剪贴画&#xff0c;涉及商业活动、学习教育、社会生活等各个方面。本文中将详细为你解说怎样在MindMaster里插入剪贴画。 打开Mind…

shell脚本(1)脚本创建执行与变量使用

声明!!! 学习视频来自B站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章 视频链接&#xff1a;泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 执行文件方法 首先…

智能体创新大赛|全球规模最大智能体赛事,超3成获奖者已使用智能体赚钱

11 月 12 日&#xff0c;百度搜索联合技术合作伙伴NVIDIA举办的「2024百度搜索文心智能体创新大赛」决赛颁奖典礼在百度世界2024「文心智能体&#xff0c;新智生产力」分论坛举行。 据了解&#xff0c;这是全球规模最大的智能体大赛&#xff0c;共吸引近万名参与者提交近 4000…

PVE纵览-Proxmox VE SDN入门指南:构建灵活的虚拟网络

PVE纵览-Proxmox VE SDN入门指南&#xff1a;构建灵活的虚拟网络 文章目录 PVE纵览-Proxmox VE SDN入门指南&#xff1a;构建灵活的虚拟网络摘要SDN 在 PVE 中的作用SDN 在 PVE 中的作用区域和 VNetsIPAM&#xff08;IP Address Management&#xff09; 关键字&#xff1a; PV…

【含文档】基于ssm+jsp的高校财务处理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定义了两个…

安全见闻2

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

PVE纵览-Proxmox VE中的权限架构:角色、组与用户的关系

PVE纵览-Proxmox VE中的权限架构&#xff1a;角色、组与用户的关系 文章目录 PVE纵览-Proxmox VE中的权限架构&#xff1a;角色、组与用户的关系摘要权限1. 用户&#xff08;Users&#xff09;2. API 令牌&#xff08;API Tokens&#xff09;3. 二次验证&#xff08;Two-Factor…

统计从输入的两个整数a和b所确定的范围内(0 ~ 9)出现的次数(c基础)

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>//统计从输入的两个整数a和b所确定的范围内(0 ~ 9)出现的次数 int main() {//创建两个变量输入范围int a 0;int b 0;printf("请输入两个整数:>");scanf("%d %d", &a, &b);//保证 a &…

ssm103宠物领养系统+vue(论文+源码)_kaic

毕业设计&#xff08;论文&#xff09; 宠物领养系统的设计与实现 学生姓名&#xff1a; 二级学院&#xff1a; 班级名称&#xff1a; 指导教师&#xff1a; 年 月 日 录 摘 …

expo5.2运行web报错Cannot find module ‘react‘

修改app.json中的web output 配置为 ‘single’ 可以解决 expo run web 这个错误问题 "web": {"bundler": "metro","output": "single","favicon": "./assets/images/favicon.png"},相关链接&#xff1…

边缘提取函数 [OPENCV--2]

OPENCV中最常用的边界检测是CANNY函数 下面展示它的用法 通常输入一个灰度图像&#xff08;边界一般和颜色无关&#xff09;这样也可以简化运算cv::Canny(inmat , outmat , therhold1, therhold2 ) 第一个参数是输入的灰度图像&#xff0c;第二个是输出的图像这两个参数都是引用…