java.lang.reflect.InvocationTargetException: null,依赖版本,配置文件的地址都对了。但还是出现这个错误。

1年前 (2022) 程序员胖胖胖虎阿
145 0 0

一、问题描述

在启动微服务时总是报java.lang.reflect.InvocationTargetException: null 错误

经检查,发现是nacos 配置管理的 spring-cloud-starter-alibaba-nacos-config 依赖报出的。

查阅资料说,要么是依赖版本问题,要么是nacos服务地址没配置。

java.lang.reflect.InvocationTargetException: null,依赖版本,配置文件的地址都对了。但还是出现这个错误。

但我这个这两项都没问题,可以排除掉了。

二、问题研究

于是多番尝试发现,当我把配置文件改成properties时候惊奇的发现就可以了

java.lang.reflect.InvocationTargetException: null,依赖版本,配置文件的地址都对了。但还是出现这个错误。

 java.lang.reflect.InvocationTargetException: null,依赖版本,配置文件的地址都对了。但还是出现这个错误。

 那为什么properties与yml配置文件参数都一样,而效果却截然不同。

三、原因

1、配置文件类型的不同

在查阅资料后,知道了,原来配置文件的类型也有讲究。

application.yml,application.properties两个虽然都是配置文件,但是他们是有区别的。properties优先级高于yml,但似乎根优先级没什么关系,因为我的配置文件要么是properties,要么是yml。这里我怀疑他们的加载方式应该也是不一样的。但我又没证据。

2、配置文件名的不同

后来我又发现application.yml 和bootstrap.yml是有区别的。

 优先级不同,若application.yml 和bootstrap.yml 在同一目录下:bootstrap.yml 先加载 application.yml后加载

bootstrap.yml 用于应用程序上下文的引导阶段,它是由父Spring ApplicationContext加载。默认情况下,他是不会被其他配置覆盖。

然后我把application.yml改成bootstrap.yml重新启动。。。。

java.lang.reflect.InvocationTargetException: null,依赖版本,配置文件的地址都对了。但还是出现这个错误。

 然后就解决了。

四、总结

配置信息都一致,配置文件类型或命名不同时。

类型 结果
application.yml    false
application.properties  true
bootstrap.yml  true

当出现java.lang.reflect.InvocationTargetException: null,依赖版本没问题,nacos服务地址配置没问题。不妨检查一下。我们的配置文件类型,配置文件的命名。

所以我这里的问题就在于application.yml,bootstrap.yml命名的区别。

相关文章

暂无评论

暂无评论...