最近尝试Spring Cloud遇到的坑真是不少,没用Spring Boot基础,从0开始。
今天在本地跑的好好的,部署到服务器的时候,redis部分报错,连不上redis数据库,一开始以为是配置上出了问题,因为jedis默认连接localhost,而本地环境就是localhost。
java.net.UnknownHostException: izuf6exyy60ycw5yrdcco0z: izuf6exyy60ycw5yrdcco0z: Name or service not known
调试了好久发现,izuf6exyy60ycw5yrdcco0z是阿里云ECS主机的主机名。
不会是,主机名解析不到IP吧。
默默地在hosts里加上一条解析
127.0.0.1 izuf6exyy60ycw5yrdcco0z
真的就解决了
总结:Linux下的/etc/hostname中可能会包含主机名,比如上面的izuf6exyy60ycw5yrdcco0z,而在/etc/hosts下面没有对应的映射。
深层的原因: 在大多数Linux操作系统中,都是以/etc/hosts中的配置查找主机名的,但是 Detian based system用/etc/hostname文件中的配置做主机名。
而Java 的InetAddress.java 调用 InetAddressImpl.java 的 public native String getLocalHostName() throws UnknownHostException; 来获取本地主机名, Java 的这个方法是native的,是本地系统的一个实现,所以在本地配置出现问题的情况下,Java 代码出现问题。