这几天在开发过程中,启动项目会出现一个Timeout的异常
java.net.SocketTimeoutException: connect timed out at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:525) at sun.net.NetworkClient.doConnect(NetworkClient.java:158) at sun.net.www.http.HttpClient.openServer(HttpClient.java:394) at sun.net.www.http.HttpClient.openServer(HttpClient.java:529) at sun.net.www.http.HttpClient.<init>(HttpClient.java:233) at sun.net.www.http.HttpClient.New(HttpClient.java:306) at sun.net.www.http.HttpClient.New(HttpClient.java:323) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:860) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:801) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:726) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1049) at net.sf.ehcache.util.UpdateChecker.getUpdateProperties(UpdateChecker.java:108) at net.sf.ehcache.util.UpdateChecker.doCheck(UpdateChecker.java:72) at net.sf.ehcache.util.UpdateChecker.checkForUpdate(UpdateChecker.java:60) at net.sf.ehcache.util.UpdateChecker.run(UpdateChecker.java:51) at java.util.TimerThread.mainLoop(Timer.java:512) at java.util.TimerThread.run(Timer.java:462)
从异常名称(SocketTimeoutException)来看是一个socket连接超时,应该是连接其他资源出现的异常。
接着看堆栈的信息,发现有sun.net.www.http.HttpClient,定位这是一个http请求。但是程序在启动的时候并没有去连接任何外部的http资源啊?奇怪了~继续向下看看会不会有新的发现吧。
果然有发现,ehcache,可爱的缓存怎么还会去请求http资源呢?程序使用RMI方式做ehcache集群配置,不应该会有http请求啊,先不想了,跟到源码里看一下吧。
run->checkForUpdate->doCheck都没什么内容,跟着逻辑就进到了net.sf.ehcache.util.UpdateChecker.getUpdateProperties(其实这个类名已经说明这是在做更新检查了,我竟然忽略的看类名)
private Properties getUpdateProperties(URL updateUrl) throws IOException { URLConnection connection = updateUrl.openConnection(); connection.setConnectTimeout(CONNECT_TIMEOUT); InputStream in = connection.getInputStream(); try { Properties props = new Properties(); props.load(connection.getInputStream()); return props; } finally { if (in != null) { in.close(); } } }
扔断点,启动调试观察updateUrl(我竟然还没意识到这是在检测更新)
http://www.terracotta.org/kit/reflector?pageID=update.properties&kitID=ehcache.default&id=-1062731420&os-name=Windows+7&jvm-name=Java+HotSpot%28TM%29+Client+VM&jvm-version=1.6.0_18&platform=x86&tc-version=2.6.3&tc-product=Ehcache+Core+2.6.3&source=Ehcache+Core&uptime-secs=1&patch=UNKNOWN
这么长的地址,但是看这个域名挺眼熟,好像是......没再想了,先把地方放到浏览器上看看是什么
## Top level keys # general.notice = This notice should rarely, if ever, be used as everyone running ehcache will see it ## 2.6.5 -- latest release 2.6.5.updates = 2.6.5.notices = This is the latest GA release. 2.6.5.release-notes = http://www.terracotta.org/confluence/display/release/Release+Notes+Ehcache+Core+2.6 ## 2.6.3 2.6.3.updates = 2.6.5 2.6.3.notices = This is the latest GA release. 2.6.3.release-notes = http://www.terracotta.org/confluence/display/release/Release+Notes+Ehcache+Core+2.6 ## 2.6.2 2.6.2.updates = 2.6.5 2.6.2.notices = We recommend upgrading to 2.6.5, our latest GA release 2.6.2.release-notes = http://www.terracotta.org/confluence/display/release/Release+Notes+Ehcache+Core+2.6 ## 2.6.0 2.6.0.updates = 2.6.5 2.6.0.notices = We recommend upgrading to 2.6.5, our latest GA release 2.6.0.release-notes = http://www.terracotta.org/confluence/display/release/Release+Notes+Ehcache+Core+2.5 ## 2.5.7 2.5.7.updates = 2.6.5 2.5.7.notices = We recommend upgrading to 2.6.5, our latest GA release 2.5.7.release-notes = http://www.terracotta.org/confluence/display/release/Release+Notes+Ehcache+Core+2.5 2.5.6-SNAPSHOT.updates = 2.6.5 ## 2.5.6 2.5.6.updates = 2.6.5 2.5.6.notices = We recommend upgrading to 2.6.5, our latest GA release 2.5.6.release-notes = http://www.terracotta.org/confluence/display/release/Release+Notes+Ehcache+Core+2.5
这是什么东西?好像是版本更新~版本更新?版本更新!竟然是版本更新!打开ehcache.xml检查一下
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="true" monitoring="autodetect" dynamicConfig="true">
竟然真的启动了检查更新,折腾了一大圈,竟然是ehcache在检查版本更新,可能是我浏览器挂了goagent的原因,在浏览器里访问时正常的,但是在程序中确无法访问,所以就出现了Timeout的异常。
把updateCheck改成false就解决了。(写了这么一大堆就最后一句话有用。^_^)
相关推荐
NULL 博文链接:https://yongtree.iteye.com/blog/272293
Ehcache 的升级与优化 随着技术的发展,Ehcache 也经历了多个版本的迭代,如 Ehcache 2.x 和 Ehcache 3.x。Ehcache 3.x 引入了 Java Caching System (JSR 107) 规范,提供了更现代的 API 和更好的性能。 优化 ...
1.解压缩到目录下,复制ehcache-monitor-kit-1.0.0\lib\ehcache-probe-1.0.0.jar包到application的web-inf/lib目录下 2.将以下配置copy的ehcache.xml文件的ehcache标签中,注:上述链接中说的配置少写了个probe包名...
此外,我们可以通过反射来模拟不同的场景,比如在测试中更改对象的状态,然后检查Ehcache如何根据新的状态处理缓存。 在提供的文件列表中,我们看到几个关键的项目: 1. `.classpath` 和 `.project` 文件是Eclipse...
如果2.5.0版本的代码运行良好,且升级带来的新功能不是必需的,那么保持现状可能是最佳选择。否则,需要进行代码审查和测试,以确保新版本的Ehcache与应用程序的其他部分兼容。 总结来说,Ehcache-core的这三个版本...
【标题解析】:“ehcache.xsd_ehcache.xml代码提示.rar”这个标题表明这是一个与Ehcache缓存系统相关的资源包,主要目的是为Ehcache的配置文件ehcache.xml提供代码提示功能。Ehcache是一个广泛使用的开源Java缓存...
**Ehcache简介** Ehcache是一款开源的Java缓存框架,它被广泛应用于提高应用程序性能,通过存储数据副本以减少对数据库的访问。Ehcache最初由Tomi Tirro设计,现在是Terracotta公司的产品,是Java世界中常用的二级...
Ehcache是一个开源的、高性能的缓存解决方案,广泛应用于Java应用程序中,以提高数据访问的速度和效率。本文将深入探讨Ehcache的简单监控,帮助开发者更好地理解其工作原理和性能状态。 首先,了解Ehcache的核心...
Ehcache是一个广泛使用的开源Java缓存库,它为应用程序提供了高效的内存管理和数据缓存功能。Ehcache的核心目标是提高应用性能,通过将频繁访问的数据存储在内存中,减少对数据库的依赖,从而降低系统负载。这次我们...
赠送jar包:ehcache-3.3.1.jar; 赠送原API文档:ehcache-3.3.1-javadoc.jar; 赠送源代码:ehcache-3.3.1-sources.jar; 赠送Maven依赖信息文件:ehcache-3.3.1.pom; 包含翻译后的API文档:ehcache-3.3.1-javadoc-...
3. **多种缓存策略**:ehcache支持LRU(Least Recently Used)、LFU(Least Frequently Used)和FIFO(First In First Out)等多种缓存淘汰策略,满足不同场景下的需求。 4. **二级缓存**:ehcache不仅提供内存缓存...
此外,压缩也会带来一定的CPU开销,因此需要权衡压缩带来的带宽节省与CPU资源的消耗。 综上所述,EhCache开启gzip压缩功能是优化Web应用性能的有效手段,能够减少网络延迟,提高用户体验。同时,正确地配置和使用...
【标题】:“Hibernate + Ehcache 整合使用详解” 【描述】:“Hibernate 是一款流行的 Java 持久层框架,而 Ehcache 是一个高效的分布式内存缓存系统。将两者结合,能够极大地提升应用的性能,减少数据库的负载,...
Ehcache是一个高性能的、基于Java的进程内缓存解决方案,它被广泛应用于各种Java应用程序,包括Java EE和轻量级容器。Ehcache的主要优势在于它的快速响应、易用性和丰富的缓存策略。它提供了两种级别的缓存存储:...
Ehcache是一个开源的Java缓存库,广泛用于提高应用程序的性能和响应速度,通过存储经常访问的数据在内存中,避免了频繁的数据库查询。它最初由Tomi Triebel开发,现在是Terracotta公司的产品。在版本2.6.5中,...
Ehcache是一款高性能、易用且广泛应用于Java环境中的分布式缓存系统,它极大地提高了应用程序的性能和响应速度。在Spring框架中集成Ehcache,能够实现数据的快速访问,减轻数据库的压力,优化整体系统架构。本文将...
本篇文章将详细探讨MyBatis与Ehcache的集成以及`ehcache.xsd`和`ehcache.xml`这两个配置文件在其中的作用。 首先,Ehcache是一个开源的、高性能的Java缓存库,它能够极大地减少对数据库的访问,提高应用程序的响应...
4. **缓存策略**:EHCache提供多种缓存策略,如LRU(Least Recently Used)最近最少使用、LFU(Least Frequently Used)最不经常使用、FIFO(First In First Out)先进先出等,可以根据业务需求选择合适的策略。...
**Ehcache** 是一个广泛使用的Java缓存库,它为应用程序提供了本地内存缓存功能,以提高数据访问速度和减少数据库负载。Ehcache在处理高并发和大数据量的场景下表现出色,尤其适用于那些频繁读取但不经常修改的数据...
Ehcache 还提供了多种操作,如更新元素 (`cache.put(new Element("key7", "NewValue7"))`)、检查缓存大小 (`cache.getSize()`)、磁盘持久化 (`cache.flush()`) 等。 Ehcache 支持多种缓存策略,如 LRU(Least ...