获取“无法分配请求的地址”java。网使用Ehcache多播的SocketException
尝试启动多播提供程序时获取java.net.SocketException
:
2013-09-11 11:45:44,204 [main] ERROR net.sf.ehcache.distribution.MulticastRMICacheManagerPeerProvider: Error starting heartbeat. Error was: Can't assign requested address
java.net.SocketException: Can't assign requested address
at java.net.PlainDatagramSocketImpl.join(Native Method)
at java.net.AbstractPlainDatagramSocketImpl.join(AbstractPlainDatagramSocketImpl.java:178)
at java.net.MulticastSocket.joinGroup(MulticastSocket.java:319)
at net.sf.ehcache.distribution.MulticastKeepaliveHeartbeatReceiver.init(MulticastKeepaliveHeartbeatReceiver.java:88)
at net.sf.ehcache.distribution.MulticastRMICacheManagerPeerProvider.init(MulticastRMICacheManagerPeerProvider.java:95)
# 1 楼答案
在加入任何机器中的多播套接字之前,需要向Java VM添加某些配置
在尝试任何连接之前,请首先添加此行,以确保仅获取IPv4地址:
在大多数情况下,您的计算机具有多个网络接口,因此您需要选择正确的网络接口:
# 2 楼答案
对已接受的答案有一点不同:您还可以向java代码中添加以下代码行:
# 3 楼答案
在我的例子中,我刚刚开始使用VPN连接到需要身份验证的网络。我的应用程序将启动并可以通过管道连接到数据库,但我的分布式缓存配置使用ehcach中的IP 230.0.0.1。xml是原因。在生产中,一切都很好,在本地,它将简单地失败并回滚到不同的策略,但是通过VPN,多播请求遇到了身份验证挑战,结果就是这个错误。我只需要短期修复,因此在这些环境中,我禁用了ehcache多播配置,一切恢复正常
这是
ehcache.xml
中有问题的一行,只是被注释掉了