【Apollo】阿波罗使用占位符 #{} 的异常分析

文章目录

    • 1. 前言
    • 2. 复现
    • 3. 分析
      • 3.1 @Value 注解
      • 3.2 根因
    • 4. 后记
    • 5. 参考资料

1. 前言

出于线上 hotfix 报文请求模板的考虑,新增一个阿波罗配置,取值形如:
在这里插入图片描述

发布配置一段时间后,刚好需要重启服务,最终造成服务宕机,影响较大。现本地复现一下这个异常,并加以分析。

2. 复现

  • Java 声明配置的方式:@value
@Component
public class ConfigDemo {@Value("${configKey:}")private String configValue;public String getConfigValue() {return configValue;}
}
  • 异常用例:configValue 在远端配置的字符串存在占位符 #{}
    在这里插入图片描述

  • 报错信息

Error creating bean with name ‘configDemo’: Unsatisfied dependency expressed through field ‘configValue’; nested exception is org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field ‘any’ cannot be found on object of type ‘org.springframework.beans.factory.config.BeanExpressionContext’ - maybe not public or not valid?

3. 分析

3.1 @Value 注解

SpringApollo 都会读该注解的值,一旦 Apollo 推送新的配置(或初始化),Spring 同时也会消费新配置。

  • @value 被消费的示意图
    在这里插入图片描述

3.2 根因

查阅了 Spring官方文档 后,形如 #{} 的表达式会被认为是 SPEL 表达式,在 Apollo 控制台配置的时候未想过占位符会被SPEL 表达式消费,造成预期外的异常。
在这里插入图片描述
在这里插入图片描述

4. 后记

  • 结论
    如果项目中用 @Value 承载 Apollo 的配置,那么不要使用与 SPEL 表达式 重合的符号。最好是干脆不要使用未经过生产检验的配置方式。如果实在要使用,可以用最原生的 Apollo 配置能力。
@Component
public class ConfigDemo {@ApolloConfigprivate Config config;public String getConfigValue() {return config.getProperty("configKey", "notfind");}
}

5. 参考资料

本地搭建 Apollo 环境
Apollo 官方文档
Spring SPEL 官方文档

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

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

相关文章

在Ubuntu22.04上安装WordPress

WordPress是当今最简单、最强大的博客和网站建设工具。据统计全球大约有40% 以上网站是使用WordPress,这是个巨大的数字也侧面证明了WordPress的强大和普遍性。因此,如果你正在寻找一款高效、实用、可靠的CMS工具来构建网站,那么WordPress无疑…

关于HAL库外部中断的开关流程

通过HAL库配置好外部中断后,会生成如下代码: static void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct {0}; /* USER CODE BEGIN MX_GPIO_Init_1 */ /* USER CODE END MX_GPIO_Init_1 *//* GPIO Ports Clock Enable */__HAL_RCC_GPIOD_CLK_…

self-attention(上)李宏毅

B站视频链接 word embedding https//www.youtube.com/watch?vX7PH3NuYW0Q self-attention处理整个sequence,FC专注处理某一个位置的资讯,self-attention和FC可以交替使用。 transformer架构 self-attention的简单理解 a1-a4可能是input也可以作为中…

如何把电脑中的项目快速传进Github中?

一、打开GitHub网站:https:github.com 登录自己的个人账号 1.新建一个项目 2.用鼠标直接拖拽电脑中的项目文件夹与文件到新创建的项目中点击保存即可。

JS手写apply,call,bind函数

本篇文章咱们来手写简易版的apply,call,bind函数。 实现思路 首先咱们需要思考下这三个函数放到哪里比较合适,因为这三个函数是被函数对象调用的,并且每个函数都可以调用,所以不难想到有一个位置非常合适,…

springboot第47集:【思维导图】面向对象,关键字,标识符,变量,数组的使用...

关键字:class,public,static,void等,特点是全部关键字都是小写字母。 image.png image.png 凡是自己起的名字可以叫标识符 image.png image.png image.png image.png 整数类型的使用 image.png image.png image.png 浮点类型 image.png image.png 字符类…

用队列实现栈oj题——225

. 个人主页:晓风飞 专栏:LeetCode刷题|数据结构|Linux 路漫漫其修远兮,吾将上下而求索 文章目录 题目要求:实现 MyStack 类:注意:示例:解释:提示: 解题核心数据结构的定义…

ASP.NET Core基础之图片文件(二)-WebApi图片文件上传到文件夹

阅读本文你的收获: 了解WebApi项目保存上传图片的三种方式学习在WebApi项目中如何上传图片到指定文件夹中 在ASP.NET Core基础之图片文件(一)-WebApi访问静态图片文章中,学习了如何获取WebApi中的静态图片,本文继续分享如何上传图片。 那么…

Python点云处理(二十一)基于Gradient Boosting的点云分类算法

目录 0 简述1 Gradient Boosting2 点云特征向量构建3 用Gradient Boosting进行分类4 代码实现5 结果展示0 简述 点云分类是计算机视觉领域中的一个重要任务,其主要目标是将三维空间中的点云数据划分为不同的类别。点云是由大量的三维点组成的数据集,通常由激光雷达或结构光等…

uniapp 微信小程序跳转外部链接

一、背景: 开发小程序时,跳转到内部路径通常会使用:uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab等方法,可以跳转到pages.json中已经注册的页面 uni.navigateTo(OBJECT) | uni-…

编程天赋和努力哪个更重要?

编程天赋和努力在编程中都非常重要,但它们的侧重点不同。 编程天赋通常指的是与生俱来的、在逻辑思维、抽象思维、创造力等方面的能力,这些能力可以帮助程序员更快地理解问题、更高效地设计和实现解决方案。天赋的确可以帮助程序员更容易地入门和更快地掌…

[通俗易懂]c语言中指针变量和数值之间的关系

一、指针变量的定义 在C语言中,指针变量是一种特殊类型的变量,它存储的是另一个变量的内存地址。指针变量可以用来间接访问和操作内存中的其他变量。指针变量的定义如下: 数据类型 *指针变量名;其中,数据类型可以是任…

联邦学习中聚合算法可能怎样创新,智慧农业结合什么数学理论或知名理论实现创新并发表文章

目录 联邦学习中聚合算法可能怎样创新 智慧农业结合什么数学理论或知名理论实现创新并发表文章

什么是集合

在数学中,集合是由一些确定的对象组成的整体。这些对象称为集合的元素, 在Java中,集合(Collection)是一种用来存储和操作一组对象的容器。Java提供了多个集合类和接口,位于java.util包中,用于处…

深度解析基于模糊数学的C均值聚类算法

深度解析基于模糊数学的C均值聚类算法 模糊C均值聚类 (FCM)聚类步骤:FCM Python代码: 模糊C均值聚类 (FCM) 在数据挖掘和聚类分析领域,C均值聚类是一种广泛应用的方法。模糊C均值聚类(FCM)是C均值聚类的自然升级版。相…

学习笔记——C++中数据的输入 cin

作用:用于从键盘中获取数据 关键字:cin 语法:cin>>变量 类型:C中数据的输入主要包含:整形(int)浮点型(float,double float),字符型&…

1.2 ARCHITECTURE OF A MODERN GPU

图1.2显示了典型的支持CUDA的GPU架构的高级视图。它被组织成一系列高线程的流式多处理器(SM)。在图中1.2,两个SM构成一个 block。然而,构建块中的SM数量可能因代而异。此外,在图中,每个SM都有多个共享控制逻…

复试 || 就业day11(2024.01.07)算法篇

文章目录 前言数组序号转换检查整数及其两倍数是否存在有多少小于当前数字的数字上升下降字符串找出数组中的幸运数统计最大组的数目 前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫文章题目大多来自于 leetcode&#xff…

书生·浦语大模型第二课作业

作业一:小故事创作 作业要求:使用 InternLM-Chat-7B 模型生成 300 字的小故事(需截图) 完成情况: 作业二:熟悉 hugging face 下载功能 作业要求:熟悉 hugging face 下载功能,使用…

基于Springboot的摄影跟拍预定管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的摄影跟拍预定管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系…