23-12-07晚打包安装运行失败问题记录
环境:
三个服务:iam、server、web
rpc:dubbo
注册中心:Nacos
配置中心:Nacos
打包工具:Jenkins
问题描述:
打包完成之后安装启动时报错,日志末尾报出的问题是某个bean找不到,检查该bean后发现没有问题,头上带有@DubboService注解,并且在nacos配置文件扫描的service子包中,看起来好像没问题。
问题排查:
检查日志末尾报出的未找到Bean
该bean头上带有DubboService注解、在Dubbo扫描的service子包中,通过@Autowired引入该bean,后换成@Resource也没用,将该bean换成@Service注解后报错换成另外一个bean。(这时候就应该意识到可能是dubbo或者nacos的原因)
检查打包分支代码
本地重新拉取打包的分支运行,将application文件修改,直接连到设备上的nacos,因为本地没有安装nacos,这时候运行成功(当时非常困惑,以为什么都没改确能正常运行,没想到恰恰是这个配置文件被改动了)
检查打包的lib包
对比正常环境(application配置文件没被修改的)的lib包,甚至直接将好环境的lib包scp到坏环境上启动服务,还是报之前的问题,说明跟代码确实没有关系,考虑nacos、数据库、操作系统环境等原因。
其他检查
jdk版本都是17,@Resource注解的包也是正确的。
解决
找了很久,最后还是通过日志找出问题,翻到日志最前面,在spring的bean初始化就开始error了,最后检查application文件发现配置文件内容不对,没有连接nacos导致没有拿到bean的实现类,导致bean的初始化报错,至于为什么会报一个很奇怪的bean是因为还没轮到其他bean报错就挂了。
另外,使用nacos+dubbo之后报出bean的异常,检查bean没问题之后直接排查nacos和dubbo相关。
结语
碰到问题冷静思考,先看日志先看日志先看日志,不要猜不要猜,虽然猜得验证比较快但是多次猜测没中很容易出现心态不好,后续心态崩了头也晕了很难再排查。