java.net.UnknownHostException:Test:Test:unknown error无法获取VMID的本地InetAddress

 老薛很厚道 发布于 2023-01-06 09:13

我在spring-jersey1.8 restful web服务中使用c3p0进行连接池.在启动应用程序时,我收到以下错误:

[com.mchange.v2.c3p0.impl.C3P0ImplUtils] INFO - Failed to get local InetAddress for VMID. This is unlikely to matter. At all. We'll add some extra randomness
java.net.UnknownHostException: Test: Test: unknown error
    at java.net.InetAddress.getLocalHost(InetAddress.java:1484)
    at com.mchange.v2.c3p0.impl.C3P0ImplUtils.generateVmId(C3P0ImplUtils.java:120)
    at com.mchange.v2.c3p0.impl.C3P0ImplUtils.(C3P0ImplUtils.java:98)
    at com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase.(PoolBackedDataSourceBase.java:227)
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.(AbstractPoolBackedDataSource.java:62)
    at com.mchange.v2.c3p0.ComboPooledDataSource.(ComboPooledDataSource.java:109)
    at com.mchange.v2.c3p0.ComboPooledDataSource.(ComboPooledDataSource.java:105)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1069)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1021)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.UnknownHostException: Test: unknown error
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:907)
    at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1302)
    at java.net.InetAddress.getLocalHost(InetAddress.java:1479)
    ... 35 more

有谁知道这个错误是什么?

我的spring-datasource.xml文件有:


    

和pom.xml:


    c3p0
    c3p0
    0.9.1.2

Jeremy S... 7

正如另一个帖子中所述(在Steve Waldman的评论中链接),解决方案是添加缺少的条目

java.net.UnknownHostException: Test: Test: unknown error

在这种情况下,它的测试/etc/hosts

127.0.0.1    Test


Steve Waldma.. 6

因此,在一个合适的过度设计旨在防止碰撞万一许多C3P0数据源被序列化到分布式存储,C3P0试图给每个数据源一个全球唯一的"identityToken",这部分由前缀一个"VMID"来完成,意图(可能不足为奇)成为当前JVM的唯一标识符.

VMID部分由运行它的主机的Internet地址确定.所以c3p0调用java.net.InetAddress.getLocalHost()来找到它.但是java.net.InetAddress.getLocalHost(),由于安全原因或某些配置错误,可能会异常地调用失败.

所有这一切都是可怕的,可怕的矫枉过正.写完之后,我很害羞,但是我在理论上认为identityTokens可能会发生冲突,违反了一个identityToken应该映射到一个唯一池的不变量的可能性.所以,就是这样.

所以,我们找不到本地地址.哎呀.我们回过头来为我们将为您正在运行的VM生成的VMID添加一堆随机性,以减少在实践中已经无限的冲突可能性.然后我们继续前进.正如错误消息所说,"这不太重要.完全没问题."

如果您想让错误消失,您需要解决导致getLocalHost()环境中调用失败的问题.但你真的可以忽略这一点.

(看起来你的环境是IPv6,它可能与它有关.我应该研究一下这个代码是否适合在VMID中包含IPv6地址.但是你的代码还远远不够. )

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有