spring boot读取yml配置注意点记录

news2025/2/25 4:46:11

问题1:yml中配置的值加载到代码后值变了。

现场yml配置如下:

type-maps:
  infos:
    data_register: 0
    ns_xzdy: 010000
    ns_zldy: 020000
    ns_yl: 030000
    ns_jzjz: 040000
    ns_ggglyggfwjz: 050000
    ns_syffyjz: 060000
    ns_gyjz: 070000
    ns_ccywljz: 080000
    ns_qtjz: 090000

服务会根据拿到的分类代码查找对应的分类名称。项目组反馈前端传080000可以拿到分类名称,但是前端传060000的时候却拿不到值,很是奇怪。使用线上诊断神奇arthas看了一眼,大吃一惊:

这配置加载的不对劲。

一通查找发现是因为YML规范的问题:

在Spring Boot应用中,当你尝试从application.yml文件中读取一个值,并且该值是一个以01开头的数字,可能会遇到问题。YAML 1.2 规范允许以0开头的数字被解析为八进制(Octal),但是如果数字包含89,则会导致解析错误,因为八进制数系统不包含这些数字。

这也就解释了为什么080000可以,060000不可以。 因为00-07开头的都会被以8进制的方式解析,这就是上午4096等数字的由来。

解决办法:

  1. 如果你需要保持该数字为八进制,确保其余部分只包含07的数字。

  2. 如果你需要保留这个值作为字符串,可以在YAML配置中使用双引号将值包裹起来,这样Spring Boot会将其当作字符串处理,不会尝试转换为数字。 例如:



问题2:spring boot服务通过nginx代理后获取不到准确的IP。

 现场服务要求使用加密传输,于是使用nginx代理成https转发给后台。结果后台通过

request.getRequestURL()

拿到的请求还是http的,导致业务处理有问题。

又是一通查找发现首先nginx要配置转发请求协议

proxy_set_header X-Forwarded-Proto $scheme;

完整的nginx配置如下:

proxy_set_header Host $http_host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

proxy_set_header X-Forwarded-Port $server_port;

 

然后在后台服务的yml添加配置:

server:
  forward-headers-strategy: native # 自动处理请求转发问题

即可自动获取到前端发起的请求地址。 



等待下次更新。。。。。。

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

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

相关文章

通讯录(C语言详细版)

1. 前言 通讯录是在动态顺序表的基础上实现的,其实就是顺序表的每个元素存储的不再是数字,而是存储一个联系人的结构体,所以如果有些小伙伴看不懂的话,可以移步参考一下动态顺序表的实现:顺序表(C语言详细…

强强联合!当RAG遇到长上下文,滑铁卢大学发布LongRAG,效果领先GPT-4 Turbo 50%

过犹不及——《论语先进》 大学考试时,有些老师允许带备cheet sheet(忘纸条),上面记着关键公式和定义,帮助我们快速作答提高分数。传统的检索增强生成(RAG)方法也类似,试图找出精准的知识片段来辅助大语言模型(LLM)。 但这种方法其实有问题…

Oracle Database 23ai新特性:DB_DEVELOPER_ROLE角色

角色介绍 从 Oracle Database 23ai 开始,新角色“DB_DEVELOPER_ROLE”允许管理员快速分配开发人员为 Oracle 数据库设计、构建和部署应用程序所需的所有必要权限。(包括构建数据模型所需的系统权限以及监视和调试应用程序所需的对象权限)。通…

【期末复习】数据库系统概论(附带考点汇总)

第1章.绪论 目录 第1章.绪论1.1. 数据库系统概述1.1.1.基本概念1.1.2.产生和发展 1.2.概念模型1.2.1.三种模型1.2.2.概念模型1.2.3.关系模型 1.3.数据库系统结构1.3.1三级模式结构1.3.2.两级映像与数据独立性 第2章.关系型数据库2.1.关系2.2.关系操作2.2.1.基本关系操作2.2.2.关…

价格很实惠,希喂、爱立方、生生不息主食冻干抗得住实测吗?

在挑选主食冻干时,许多宠物主人都会感到头疼。尽管主食冻干相较于普通猫粮具有诸多优势,但其价格也相对高昂。这导致许多宠物主人担心高价购买的主食冻干可能营养价值并不理想。然而,在选择时,我们还需要考虑其他重要因素&#xf…

精密微型导轨加工工艺流程!

微型导轨是一种用于小型化机械设备和机床上的一种传动部件,多用于精密设备上,主要作用是支撑和导向滑块运动。想要让微型导轨长期保持高精度、高耐磨、高寿命、高效率运作,加工工艺是非常关键的步骤。 微型导轨的制造工艺主要包括机械加工、热…

三、【源码】Bean有参构造实例化

源码地址:https://github.com/spring-projects/spring-framework 仓库地址:https://gitcode.net/qq_42665745/spring/-/tree/03-parameter-constructor-instantiation Bean有参构造实例化 有参构造的实例化分两种: java自带的反射cglib代…

手把手教程教你_一键获取安居客全国小区数据

软件简介 安居客二手房小区全国实时数据,含小区名称、价格、地区、地址、商圈、标签、经纬度、物业类型、交易权属、竣工时间、产权年限、开发商、总户数、总建面积、绿化率、容积率、统一供暖 供水供电、停车位、停车费、物业费、物业公司 车位管理费、在售房源、…

应用案例 | 基于物联网工控屏的工业离心机设备监控系统

案例概况 客户:博鲁班特(BROADBENT) 应用产品:宏集物联网工控屏 应用场景:离心机设备监控系统 一、前言 在现代工业生产中,离心机作为关键的分离设备,在生产过程中扮演着至关重要的角色。随…

创新驱动,智享未来:电动车仪表盘之蓝牙芯方案

电动车行业不断发展的浪潮中,我们自豪地推出引领时代的电动车仪表盘蓝牙芯方案,为您的骑行之旅带来前所未有的智能与便捷。 精准掌控,一目了然 我们的蓝牙芯方案搭载了高性能BLE 5.0蓝牙芯片-HS6621CG-C 内核ARM Cortex-M4F, max 64MHZ,SRAM…

期权开户零门槛怎么操作?期权不满50w的开户方式

今天带你了解期权开户零门槛怎么操作?期权不满50w的开户方式。在股票期权市场上,期权交易是一种非常受欢迎的投资方式。它不仅可以增加投资组合的多样性,还可以为投资者提供一定的保护和利润机会,比如通过买入认股期权做空对冲大盘…

新建vue3项目

提示:请确定自己已将安装好环境以及一系列用到的工具包,例如node(10以上),pnpm或npm vue官网:https://cn.vuejs.org/ vue-cli官网:Vue CLI vite官网:Vite | 下一代的前端工具链 …

高薪程序员必修课-Java中 Synchronized和ReentrantLock有哪些不同?

目录 前言 1. 原理和基础 synchronized ReentrantLock 2. 功能比较 2.1 锁的可重入性 示例: 2.2 锁的公平性 示例: 2.3 锁的中断响应 示例: 2.4 尝试锁定 示例: 2.5 条件变量 示例: 3. 性能比较 4. 使…

【CT】LeetCode手撕—232. 用栈实现队列

目录 题目1- 思路2- 实现⭐232. 用栈实现队列——题解思路 3- ACM 实现 题目 原题连接:232. 用栈实现队列 1- 思路 思路 ① 用两个栈来实现队列,一个 in 入栈 和一个 out 出栈② push 入队:入栈逻辑:即将元素加入到 in 栈 里即…

基于Redisson实现分布式锁

基于redisson实现分布式锁 之前背过分布式锁几种实现方案的八股文,但是并没有真正自己实操过。现在对AOP有了更深一点的理解,就自己来实现一遍。 1、分布式锁的基础知识 分布式锁是相对于普通的锁的。普通的锁在具体的方法层面去锁,单体应…

Android-卷积神经网络(Convolutional Neural Network, CNN)

一个复杂且在Android开发中常见的算法是图像处理中的卷积神经网络(Convolutional Neural Network, CNN)。CNN被广泛用于图像识别、物体检测和图像分割等任务,其复杂性在于需要处理大量的图像数据、复杂的神经网络结构和高效的计算。 1. 卷积操作(Convolution) 数学原理:…

爬虫-豆瓣电影排行榜

获取数据 requests库 获取数据环节需要用到requests库。安装方式也简单 pip install requests 爬取页面豆瓣读书 Top 250 用requests库来访问 import requests res requests.get(https://book.douban.com/top250/) 解析: 导入requests库调用了requests库中的…

界面材料知识

界面材料是用于填充芯片和散热器之间的空隙,将低导热系数的空气挤出,换成较高导热系数的材料,以提高芯片散热能力。参考下图 图片来源网上 热阻是衡量界面材料性能最终的参数,其中与热阻有关的有: 1、导热系数&#x…

Land survey boundary report (template)

Land survey boundary report (template) 土地勘测定界报告(模板).doc

介绍几种 MySQL 官方高可用方案

前言: MySQL 官方提供了多种高可用部署方案,从最基础的主从复制到组复制再到 InnoDB Cluster 等等。本篇文章以 MySQL 8.0 版本为准,介绍下不同高可用方案架构原理及使用场景。 1.MySQL Replication MySQL Replication 是官方提供的主从同…