问题描述
最近公司把项目都开源至公司内部的gitlab上面,所有的单元测试都是通过gitlab中的CI脚本来运行的,可是在CI上面跑单元测试时产生如下图错误:
![redis_error](medhttps://raw.githubusercontent.com/smartlin/pic/main/_posts/redis/redis%E4%B8%8D%E8%83%BD%E8%A7%A3%E6%9E%90localhost%E5%9C%B0%E5%9D%80.md/redis_error.png
当时纳闷了,为什么本地环境没问题,代码在GitLab上的服务器就有问题了?
问题解决
仔细看了下错误信息,发现就是Jedis里面报错,查看源码也找到了报错的地方,如下代码:
public static String getLocalHostQuietly() {
String localAddress;
try {
localAddress = InetAddress.getLocalHost().getHostAddress();
} catch (Exception ex) {
log.logp(Level.SEVERE, HostAndPort.class.getName(), "getLocalHostQuietly", "cant resolve localhost address", ex);
localAddress = "localhost";
}
return localAddress
}
简单的分析了下,此处报错就是为获取到服务器上localhost address
于是登陆CI服务器,查看hostname后,https://raw.githubusercontent.com/smartlin/pic/main/_posts/redis/redis%E4%B8%8D%E8%83%BD%E8%A7%A3%E6%9E%90localhost%E5%9C%B0%E5%9D%80.md/bug.png
[root@template conf]# hostname
hostname
[root@template conf]#
在host文件中的localhost后添加hostname即可
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 hostname
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
配置完成后,神奇般的好了,不在报之前的错误,单元测试也OK了
刨根问底
那么问题来了,Jedis为什么要获取linux主机的hostname了?
终于让我在stackoverflow找到答案,详情请点击,居然是个bug,天呐!!!!使用2.9.x之后的版本即可解决此问题,截图如下:
end,感谢阅读!!!