当前位置: 首页 > 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

还是不行!
在这里插入图片描述

解决

实在没办法,硬编码解决问题,参考截图一。

吐了。。

秃了。

http://www.lryc.cn/news/125220.html

相关文章:

  • TCP协议的报头格式和滑动窗口
  • java 使用log4j显示到界面和文件 并格式化
  • 【js】链接中有多余的怎么取出参数值
  • Verdi_traceX and autotrace
  • 安卓逆向 - 某严选app sign算法还原
  • arcgis数据采集与拓扑检查
  • 【前端 | CSS】滚动到底部加载,滚动监听、懒加载
  • word将mathtype公式批量转为latex公式
  • docker-compose部署nacos 2.2.3
  • 软件测试52讲-学习笔记
  • 【ARM 嵌入式 编译系列 4 -- GCC 编译属性 __read_mostly 详细介绍】
  • Maven在IDEA2021版本中全局配置(一次配置处处生效)
  • 名侦探番外——Arduino“炸弹”引爆摩天大楼
  • 自适应AI chatgpt智能聊天创作官网html源码
  • 防抖,节流
  • 【Linux】多线程1——线程概念与线程控制
  • 【Maven】SpringBoot项目使用maven-assembly-plugin插件多环境打包
  • 指令集_基础
  • 学习Vue:数据绑定的基本概念
  • Python 装饰器 - 推导式(列表推导式) - 迭代器 - 生成器 - 闭包
  • 【大数据】Flink 详解(二):核心篇 Ⅲ
  • Jmeter性能测试系列-性能测试需求分析
  • Syncfusion Essential Studio JavaScrip Crack
  • 8.13黄金是否进入下行通道?下周开盘如何布局
  • Idea的基本使用带案例---详细易懂
  • MySQL中的用户管理
  • 【STM32】利用CubeMX对FreeRTOS用按键控制任务
  • c# .net mvc的IHttpHandler奇妙之旅--图片文件请求安全过滤,图片防盗链
  • STM32F407使用Helix库软解MP3并通过DAC输出,最精简的STM32+SD卡实现MP3播放器
  • STM32 CAN 过滤器设置