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 实例&…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
