OS X睡眠后无法从Java客户端访问Solr服务器

时间:2019-02-20 14:00:35

标签: java macos spring-boot solr network-programming

我的Mac笔记本电脑上有一个本地开发堆栈,可以很好地匹配生产站点。一切都在localhost的各个端口上运行:

  • Solr 6.5.1
  • Postgres
  • Spring Boot

一切正常,直到我关闭笔记本电脑。然后,在打开笔记本电脑后,依赖Solr的Java客户端的Web应用程序将无法再访问Solr服务器:

org.apache.solr.client.solrj.SolrServerException: No live SolrServers available to handle this request
...
Caused by: java.net.UnknownHostException: fe80: nodename nor servname provided, or not known
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[?:1.8.0_162]
    at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) ~[?:1.8.0_162]
    at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) ~[?:1.8.0_162]
    at java.net.InetAddress.getAllByName0(InetAddress.java:1276) ~[?:1.8.0_162]
    at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[?:1.8.0_162]
    at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[?:1.8.0_162]
    at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45) ~[httpclient-4.5.6.jar:4.5.6]
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:263) ~[httpclient-4.5.6.jar:4.5.6]

但是我仍然可以通过curl或Web界面在本地主机上手动查询Solr服务器,即使完全相同的查询也可以正常工作。而且无论如何,与postgres的连接总是可以的。只是与solr的Java客户端连接失败。

此问题状态持续存在:

  • 停止并启动Spring Boot
  • 停止并启动Solr
  • 重新启动IDE
  • 通过命令行启动网站
  • 通过IDE启动网站
  • 通过ifconfig ...下/上循环所有网络接口
  • 以上任意组合

恢复该连接的唯一方法是重新引导计算机。多年来,此问题在几台笔记本电脑和OS X的各种版本中一直存在,但目前我的问题是10.13.6高。

我的问题:

  1. 是否有防止此问题发生的修补程序
  2. 至少有一种更快的方法来恢复连接而不必重启计算机

1 个答案:

答案 0 :(得分:0)

此博客文章解决了我的问题https://thoeni.io/post/macos-sierra-java/

从本质上讲,Java似乎存在很多问题(无法解决),在某些情况下很难解析本地主机名,而这一切都可以通过这种简单的方法解决解决:

  1. 在终端中键入hostname命令以确定您的主机名。假设答案是YOUR-HOSTNAME。

  2. 在您的/etc/hosts中添加或修改这些条目:

127.0.0.1 localhost YOUR-HOSTNAME ::1 localhost YOUR-HOSTNAME