当前位置: 首页 > news >正文

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&#xff0c;数学问题求解 二、角色提示三、多范例提示 一、提示过程 指导人工智能&#xff0c;执行任务的过程&#xff0c;称为提示过程。向AI 提供一组指令&#xff08;提示&#xff09;&#xff0c;然后它执行任务 1,文章摘要 例如&a…...

学习Vue:数据绑定的基本概念

在 Vue.js 中&#xff0c;Vue 实例是您构建应用程序的核心。它允许您将数据和界面连接起来&#xff0c;实现动态的数据绑定&#xff0c;使您的应用程序能够根据数据的变化自动更新界面。让我们来深入了解 Vue 实例与数据绑定的基本概念。 Vue 实例与数据绑定 什么是 Vue 实例&…...

Qwen3-14B私有部署镜像Visio流程图智能生成:从文本描述到架构图

Qwen3-14B私有部署镜像Visio流程图智能生成&#xff1a;从文本描述到架构图 1. 引言&#xff1a;技术文档绘图的痛点与解决方案 技术文档编写过程中&#xff0c;最耗时费力的环节之一就是绘制系统架构图和流程图。传统方式需要手动在Visio中拖拽图形、调整布局、添加连接线&a…...

Inconsolata字体高效使用实战指南:提升编程体验的专业字体方案

Inconsolata字体高效使用实战指南&#xff1a;提升编程体验的专业字体方案 【免费下载链接】Inconsolata Development repo of Inconsolata Fonts by Raph Levien 项目地址: https://gitcode.com/gh_mirrors/in/Inconsolata 作为开发者&#xff0c;我们每天与代码打交道…...

Ostrakon-VL终端惊艳效果:终端打印支持ANSI颜色码高亮关键信息

Ostrakon-VL终端惊艳效果&#xff1a;终端打印支持ANSI颜色码高亮关键信息 1. 像素特工终端概览 Ostrakon-VL终端是一款专为零售与餐饮场景设计的智能扫描工具&#xff0c;基于Ostrakon-VL-8B多模态大模型开发。与传统工业级UI不同&#xff0c;它采用了独特的8-bit像素艺术风…...

用ZYNQ PS-SPI给Flash测个速:华邦W25Q80在25MHz时钟下的真实读写性能报告

ZYNQ PS-SPI Flash性能深度评测&#xff1a;华邦W25Q80在25MHz时钟下的极限挖掘 当我们需要在嵌入式系统中选择一款Flash存储器时&#xff0c;数据手册上的理论参数往往无法反映真实应用场景下的性能表现。本文将基于Xilinx ZYNQ平台的PS-SPI接口&#xff0c;对华邦W25Q80 Flas…...

ESP32-S3驱动JW01二氧化碳传感器:从供电陷阱到数据解析的实战指南

1. 硬件连接&#xff1a;电压匹配是生死线 第一次拿到JW01传感器时&#xff0c;我像往常一样顺手接上了ESP32-S3开发板的5V引脚——毕竟大多数传感器模块都标着"5V供电"的字样。结果串口监视器里一片死寂&#xff0c;连乱码都没有。翻出万用表测量才发现&#xff0c;…...

LangChain实战避坑:我的RAG项目为什么召回结果不准?从向量化到混合检索的调优全记录

LangChain实战调优&#xff1a;从召回失败到精准检索的完整解决方案 当你的RAG系统在回答"夏天旅行推荐"时&#xff0c;返回了撒哈拉沙漠海滩和新疆火山口这类荒谬结果&#xff0c;问题可能出在文本分割、嵌入模型或混合检索策略上。本文将分享一套经过实战验证的调优…...

如何快速掌握正则表达式示例生成器:从入门到精通的完整指南

如何快速掌握正则表达式示例生成器&#xff1a;从入门到精通的完整指南 【免费下载链接】regexp-examples Generate strings that match a given regular expression 项目地址: https://gitcode.com/gh_mirrors/re/regexp-examples 正则表达式示例生成器&#xff08;reg…...

go-pry配置文件详解:自定义导入包和调试选项

go-pry配置文件详解&#xff1a;自定义导入包和调试选项 【免费下载链接】go-pry An interactive REPL for Go that allows you to drop into your code at any point. 项目地址: https://gitcode.com/gh_mirrors/go/go-pry go-pry是一款强大的Go语言交互式REPL工具&…...

React Native Keyboard Controller部署指南:生产环境最佳配置

React Native Keyboard Controller部署指南&#xff1a;生产环境最佳配置 【免费下载链接】react-native-keyboard-controller Keyboard manager which works in identical way on both iOS and Android 项目地址: https://gitcode.com/gh_mirrors/re/react-native-keyboard-…...

StructBERT中文情感识别效果展示:电影评论情感极性与票房相关性验证

StructBERT中文情感识别效果展示&#xff1a;电影评论情感极性与票房相关性验证 1. 项目概述与背景 StructBERT 情感分类 - 中文 - 通用 base 是百度基于 StructBERT 预训练模型微调后的中文通用情感分类模型&#xff0c;专门用于识别中文文本的情感倾向。这个模型在中文 NLP…...