一个 HBase 无法写入的奇怪问题
问题现象
本地环境测试可以正常写入 HBase,但是打包部署到测试环境上之后,HBase 就写入失败了,并且报错 java.lang.reflect.invocationtargetexception。
问题分析
将测试环境的 yml 拿到本地,Debug 模式启动应用,发现可以写入 HBase。
这就很奇怪了,完全想不通,一点也没有头绪。
本着死马当活马医,将测试和本地的日志进行对比,当我对比到快结束的时候:
发现两者的 JDK 版本不一致,测试环境的是 JDK 11,而本地的是 JDK 8,觉得可能是这个原因。
下面进行验证,点击 Application 右边的下拉,选择「Edit Configuration」:
将运行时 JDK 版本修改为 java 11,点击「OK」进行保存:
重新进行测试,果然报了一样的错误。
问题原因
测试环境的 JDK 与本地环境的 JDK 不一致,后面深入分析了下是因为 JDK 8 与 JDK 11 的反射机制存在差异,导致报错 java.lang.reflect.invocationtargetexception。
解决方法
将本地的 JDK 8 文件夹拷贝的服务器,使用命令 "D:\Program Files\jdk-8\bin\java.exe" -jar analysis-1.1.0.jar
启动应用。