java - OS X sleep 后 Java 客户端无法访问 Solr 服务器

标签 java macos spring-boot solr network-programming

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

  • Solr 6.5.1
  • Postgres
  • Spring 启动

一切都运行良好,直到我关闭笔记本电脑。然后打开笔记本电脑后,依赖于 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 的连接总是很好。只是 Java 客户端与 solr 的连接失败。

此问题状态持续存在:

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

恢复该连接的唯一方法是重新启动我的计算机。多年来,这个问题在多款笔记本电脑和 OS X 版本中一直存在,但目前我使用的是 10.13.6 high Sierra。

我的问题:

  1. 是否有解决方案可以防止出现此问题
  2. 是否有至少一种更快的方法来恢复连接而无需重新启动计算机

最佳答案

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

本质上,似乎存在一个“主机”问题(不能让这个双关语过去!)围绕 Java 在某些情况下很难解析本地主机名,并且这些问题都可以通过这个简单的修复来解决:

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

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

127.0.0.1 localhost 您的主机名 ::1 本地主机您的主机名

关于java - OS X sleep 后 Java 客户端无法访问 Solr 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54788145/

相关文章:

java - 将 java 中的文件类型关联注入(inject)到 Windows 或 Mac 环境中

java - Paypal : Checking out which user paid?

macos - 在 iOS 和 Mac OS 应用程序之间共享业务逻辑代码

ios - 从 visual studio 2013 运行 xamarin.ios 应用程序?

java - Spring : How to create similar beans in Spring Boot dynamically?

spring-boot - 休息 Controller 通过Spring kafka返回kafka中的记录

java - 如何从 java keystore 中选择正确的 SSL 证书,以便在相互 TLS 的情况下发送到相应的端点

macos - OSX 终端命令移动目录中的所有文件

java - Command Handler 是否只是从总线接收命令并发布事件?

java - 谷歌语音java getSMS()