Kotlin实战之获取本地配置文件、远程Apollo配置失败问题排查
背景
Kotlin作为一门JVM脚本语言,收到很多Java开发者的青睐。
项目采用Java+Kotlin混合编程。Spring Boot应用开发,不会发生变动的配置放在本地配置文件,可能会变化的配置放在远程Apollo Server。
问题
因为业务需要,需要增加一个可能会持续更新的配置,然后通过if else逻辑来加以判断。
apollo配置:

下面截图里的硬编码是未解决问题的 back-up 方案:

控制台打印:

事实上,本地开发时,习惯性先实现业务逻辑,一开始并没有在Apollo新增配置screen.channel,而是采用上面图2里的硬编码方式:
@Value("\${screen.channel: xhwjk_screen}")
var screenChannel: String? = null
这种方式不会去读取本地配置文件,也不会读取Apollo Server的配置,直接设置一个default值,也就是xhwjk_screen,但断点调试时,拿不到数据。
在本地bootstrap.yml文件里新增配置:
screen:channel: xhwjk_screen,pdwjk_screen
另外application.yml里也试过增加相同的配置项。
结论都是:获取不到配置。
对比
相同的配置,放在一个Java Controller里面就没有问题:
@Slf4j
@RestController
@RequestMapping("/dialog")
public class AuthenticationCheckController {@Value("${screen.channel: xhwjk_screen}")private String screenChannel;@GetMapping(value = "/authentication")@ResponseStatus(HttpStatus.NO_CONTENT)public void checkAuthentication() {LOGGER.info("ff:{}", screenChannel);// This resource just returns a 204 No Content in case the request is authenticated.}
}
控制台打印:
AuthenticationCheckController | checkAuthentication | 28 | - ff:xhwjk_screen,pdwjk_screen
注:
JDK版本:OpenJDK-11
Spring Boot版本:2.1.6.RELEASE
Spring Cloud版本:Greenwich.RELEASE
Kotlin版本:1.3.72
排查
尝试1
带着上面描述的问题现象搜索,找到stackoverflow-how-to-get-value-from-application-yml-in-springboot,
Apollo新增一个配置:

新增一个配置DialogConfig.kt类:
@Component
@ConfigurationProperties("dialog")
class DialogConfig {var screenChannel: String? = null
}
引用此配置:
@Resource
private val dialogConfig: DialogConfig? = null
仍然拿不到配置:

尝试2
找到另一篇stackoverflow-how-to-get-variable-from-spring-application-yaml-in-kotlin)
还是上面的DialogConfig.kt,引用配置:
@Resource
lateinit var dialogConfig: DialogConfig
直接报错:
kotlin.UninitializedPropertyAccessException: lateinit property dialogConfig has not been initialized

参考:stackoverflow-uninitializedpropertyaccessexception,使用前判断一下,没有判断的必要,还是拿不到数据。
尝试3
DialogConfig变成Java类:
@Component
@ConfigurationProperties("dialog")
public class DialogConfig {public String screenChannel;
}
引用此配置:
@Resource
var dialogConfig: DialogConfig? = null
还是不行!

解决
实在没办法,硬编码解决问题,参考截图一。
吐了。。
秃了。
相关文章:
Kotlin实战之获取本地配置文件、远程Apollo配置失败问题排查
背景 Kotlin作为一门JVM脚本语言,收到很多Java开发者的青睐。 项目采用JavaKotlin混合编程。Spring Boot应用开发,不会发生变动的配置放在本地配置文件,可能会变化的配置放在远程Apollo Server。 问题 因为业务需要,需要增加一…...
TCP协议的报头格式和滑动窗口
文章目录 TCP报头格式端口号序号和确认序号确认应答(ACK)机制超时重传机制 首部长度窗口大小报文类型URGACKSYNPSHFINRST 滑动窗口滑动窗口的大小怎么设定怎么变化滑动窗口变化问题 TCP报头格式 端口号 两个端口号比较好理解,通过端口号来找…...
java 使用log4j显示到界面和文件 并格式化
1.下载log4j jar包https://dlcdn.apache.org/logging/log4j/2.20.0/apache-log4j-2.20.0-bin.zip 2. 我只要到核心包 ,看需要 sources是源码包,可以看到说明。在IDEA里先加入class jar后,再双击这个class jar包或或右键选Navigate ,Add ,…...
【js】链接中有多余的怎么取出参数值
https://pq.equalearning.net/assessment/379208869278126080?userId23ebb&originhttps://www.equalearning.net&fnameIm&lnamehappy在上面的例子中,fnameI’m,其中单引号’被转义为, 而如果使用下面的代码,因为在UR…...
Verdi_traceX and autotrace
Verdi_traceX and autotrace Trace X From nWave/nTrace of from the Teporal Flow View. Show Paths on Flow ViewShow Paths on nWave 若Waveform中有X态,鼠标右键会有Trace X的选项; 会自动打开Temporal Flow View窗口,展示对应路径&am…...
安卓逆向 - 某严选app sign算法还原
本文仅供学习交流,只提供关键思路不会给出完整代码,严禁用于非法用途,若有侵权请联系我删除! 目标app: 5ouN5ouN5Lil6YCJMy45LjY 目标接口:aHR0cHM6Ly9hcGkubS5qZC5jb20vYXBp 一、引言 1、本篇分析某二手交易平台 …...
arcgis数据采集与拓扑检查
1、已准备好一张配准好的浙江省行政区划图,如下: 2、现在需要绘制湖州市县级行政区划。需要右击文件夹新建文件地理数据库,如下: 其余步骤均默认即可。 创建好县级要素数据集后,再新建要素类,命名为县。 为…...
【前端 | CSS】滚动到底部加载,滚动监听、懒加载
背景 在日常开发过程中,我们会遇到图片懒加载的功能,基本原理是,滚动条滚动到底部后再次获取数据进行渲染。 那怎么判断滚动条是否滚动到底部呢?滚动条滚动到底部触发时间的时机和方法又该怎样定义? 针对以上问题我…...
word将mathtype公式批量转为latex公式
最近,由于工作学习需要,要将word里面的mathype公式转为latex公式。 查了查资料,有alt\的操作,这样太慢了。通过下面链接的操作,结合起来可以解决问题。 某乎:https://www.zhihu.com/question/532353646 csd…...
docker-compose部署nacos 2.2.3
1、编写docker-compose.yml文件 version: "3.1" services:nacos:restart: alwaysimage: nacos/nacos-server:v2.2.3container_name: nacosenvironment:- NACOS_AUTH_ENABLEtrue- MODEstandalone- NACOS_AUTH_TOKEN8b92c609089f74db3c5ee04bd7d4d89e8b92c609089f74db…...
软件测试52讲-学习笔记
测试基础知识篇(11讲) 01 你真的懂测试吗?从“用户登录”测试谈起 测试用例设计框架 基于功能性需求和非功能性需求思考: 功能性需求使用等价类划分、边界值分析、错误推断法设计用例 非功能性需求考虑安全(信息的保存…...
【ARM 嵌入式 编译系列 4 -- GCC 编译属性 __read_mostly 详细介绍】
文章目录 __read_mostly 介绍__read_mostly 在 linux 中的使用.data.read_mostly 介绍 __read_mostly 介绍 __read_mostly 是一个在Linux内核编程中用到的宏定义,这是一个gcc编译器的属性,用于告诉编译器此变量主要用于读取,很少进行写入&am…...
Maven在IDEA2021版本中全局配置(一次配置处处生效)
前言 我们在开发中,Maven是必不可少的,但是每次都需要设置一遍Maven的仓库和settings.xml。真的是心累,今天教大家全局配置一下。再也不要每次项目都配了,Maven还经常出问题。 解决方案 友情提示:小编的IDEA版本为2…...
名侦探番外——Arduino“炸弹”引爆摩天大楼
名侦探番外——Arduino“炸弹”引爆摩天大楼 硬件准备1.材料准备2.模块介绍 电路设计1.硬件接线 程序设计1.设计思路2.部分程序3.功能优化 总结 好久不见,童鞋们!小编突然想到很久以前看的柯南剧场版——计时引爆摩天大楼的情景,对剧里的“炸…...
自适应AI chatgpt智能聊天创作官网html源码
我们致力于开发先进的自适应AI智能聊天技术,旨在为用户提供前所未有的聊天体验。通过融合自然语言处理、机器学习和深度学习等领域的顶尖技术,我们的智能聊天系统能够准确理解用户的需求并给出相应的回应。 我们的自适应AI智能聊天系统具备以下核心特点…...
防抖,节流
概念 防抖(debounce):类似法师技能读条,读条没完再按技能就会重新读条,在触发后的n秒内只会执行一次,若在这n秒内重复触发则重新计算 节流(throttle):连续发生的事件在n秒内只执行一次函数 参考 【前端面试必问】—…...
【Linux】多线程1——线程概念与线程控制
文章目录 1. 线程概念什么是线程Linux中的线程线程的优点线程的缺点线程的独立资源和共享资源 2. 线程控制Linux的pthread库用户级线程 📝 个人主页 :超人不会飞)📑 本文收录专栏:《Linux》💭 如果本文对您有帮助&…...
【Maven】SpringBoot项目使用maven-assembly-plugin插件多环境打包
SpringBoot项目使用maven-assembly-plugin插件多环境打包 1.创建SpringBoot项目并在pom.xml文件中添加maven-assembly-plugin配置 <!-- 多环境配置 --><profiles><!-- 开发环境 --><profile><id>dev</id><properties><prof…...
指令集_基础
指令集-基础 一、提示过程1,文章摘要2,数学问题求解 二、角色提示三、多范例提示 一、提示过程 指导人工智能,执行任务的过程,称为提示过程。向AI 提供一组指令(提示),然后它执行任务 1,文章摘要 例如&a…...
学习Vue:数据绑定的基本概念
在 Vue.js 中,Vue 实例是您构建应用程序的核心。它允许您将数据和界面连接起来,实现动态的数据绑定,使您的应用程序能够根据数据的变化自动更新界面。让我们来深入了解 Vue 实例与数据绑定的基本概念。 Vue 实例与数据绑定 什么是 Vue 实例&…...
Windows 11终极优化指南:用开源神器Win11Debloat快速清理系统垃圾
Windows 11终极优化指南:用开源神器Win11Debloat快速清理系统垃圾 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declu…...
免费开源AMD Ryzen调试工具:SMUDebugTool完全指南与实用教程
免费开源AMD Ryzen调试工具:SMUDebugTool完全指南与实用教程 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...
2026AI论文软件实测排行榜!这几款才是真神器
综合评分 TOP4 为千笔AI(99/100)、毕业之家 (96/100)、DeepSeek Scholar(89/100)、豆包学术版 (88/100)。千笔AI是全流程全能王,毕业之家专注学术合规,DeepSeek 是理工科免费神器,豆包擅长多模态与文献分析。一、测评标准说明(202…...
本centOS 10 机器所安装的数据库
方案三:考虑使用系统自带的 MySQL 版本检查 CentOS Stream 10 默认的 AppStream 仓库中是否提供了 MySQL 或其他变体(如 MariaDB)。这些版本会与系统完美兼容。sudo dnf module list mysql sudo dnf install -y mysql:8.0 # 如果可用 # 或者…...
GPT-4稀疏激活真相:2%参数背后的MoE工程代价
1. 项目概述:参数规模与稀疏激活的真相拆解“GPT-4有1.8万亿参数,但每生成一个token只用其中2%”——这句话过去两年在技术社区反复刷屏,被当作大模型“智能涌现”的佐证、算力效率革命的宣言,甚至成了不少投资人判断AI基础设施投…...
逆向思维拆解:我是如何通过AST“翻译”极验4混淆代码的逻辑的(含控制流平坦化详解)
逆向工程实战:用AST解析技术破解JavaScript混淆的艺术 当面对一团被精心混淆过的JavaScript代码时,就像侦探面对加密的线索——每个字符都可能是关键,每个变量名都可能是陷阱。本文将带你走进AST(抽象语法树)的世界&am…...
【 Godot 4 学习笔记】命名规范
命名规范类型命名规范示例文件与文件夹snake_case (蛇形)player_controller.gd, assets/类名 / 脚本名PascalCase (大驼峰)PlayerController, YAMLParser场景节点名PascalCase (大驼峰)HitBox, Camera3D, Player函数 / 方法snake_case (蛇形)func load_level():变量 / 信号snak…...
如何高效使用B站视频下载工具:DownKyi专业用户的全面技巧指南
如何高效使用B站视频下载工具:DownKyi专业用户的全面技巧指南 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等…...
金融数据宝藏库:沪深Level2与高频数据拆解
被高频数据搞懵了?硬盘空间就是这么没的。刚入坑那会儿,总想用最细的数据,结果光下载和整理就耗掉大半天,策略还没写呢。 今天简单聊聊几种常见的高频数据到底有啥区别,主要是沪深股票这块。数据来源是CMES金融数据库&…...
全球首创 XR+AGV 融合技术,超元力 XR 黑暗乘骑无轨AGV开启星际探险新纪元
传统黑暗乘骑项目长期受困于"被动观影"模式:游客坐在固定轨道车上观看预设影片,缺乏互动性,复购率低。广东超元力文化科技有限公司推出的全球首创 XR 黑暗乘骑无轨 AGV 产品,以 XRAGV 融合技术为核心,将被动…...
