Vert.x ConfigRetriever.listen监听配置文件变更未触发问题
Vert.x ConfigRetriever.listen 不触发配置变更回调的解决方案
核心原因与修复步骤
1. 配置文件路径指向错误
你使用file类型的配置存储时,指定的相对路径config.yaml可能未指向实际修改的src/main/resources/config.yaml文件。运行时程序的工作目录通常为项目根目录,但编译后的资源文件会被复制到target/classes目录,导致你修改的源文件和程序读取的文件并非同一个。
修复方案:改用classpath类型的配置存储,直接读取类路径下的资源:
ConfigStoreOptions classpathStore = new ConfigStoreOptions() .setType("classpath") .setFormat("yaml") .setConfig(new JsonObject().put("path", "config.yaml"));
- 注意:在IDE中需开启自动编译,修改
src/main/resources下的文件后,文件会自动同步到target/classes目录,Vert.x才能检测到配置变化。
2. 坚持使用file类型存储时的路径修正
若必须使用file类型,需确保路径指向正确的文件位置:
- 先打印当前工作目录确认路径:
System.out.println("当前工作目录:" + System.getProperty("user.dir"));
- 再将
path调整为实际文件的绝对路径,或相对于工作目录的正确相对路径,例如:
.setConfig(new JsonObject().put("path", "src/main/resources/config.yaml"));
3. 确认配置内容发生有效变更
Vert.x ConfigRetriever通过配置的哈希值判断是否变更,仅修改空格、换行等无意义内容不会触发回调。需修改实际配置项(如port值、eb_address值),确保生成的JsonObject与之前存在差异。
4. 验证扫描周期配置
你设置的scanPeriod(1000)(1秒)是合理的,但需确认修改文件后等待足够时间(1-2秒)再观察输出,避免因等待时间不足误以为回调未触发。
内容的提问来源于stack exchange,提问作者chhil
相关产品推荐
相关产品推荐

