解决问题:
net.sf.ehcache.util.UpdateChecker:98] New update(s) found: 2.4.7 [http://www.terracotta.org/confluence/display/release/Release+Notes+Ehcache+Core+2.4]. Please check http://ehcache.org for the latest version.
因为项目用到了ehcache,所以tomcat每次启动日志就打印net.sf.ehcache.util.UpdateChecker doCheck
以前也没有特别留意,今天在启动 Tomcat 的时候,发现了下面这段输出的信息:
2014-11-12 11:00:11 [INFO ] [net.sf.ehcache.util.UpdateChecker:98] New update(s) found: 2.4.7 [http://www.terracotta.org/confluence/display/release/Release+Notes+Ehcache+Core+2.4]. Please check http://ehcache.org for the latest version
分析才知道,EhCache在每次启动的时候都要连接到 ehcache 网站上去检查新版本,所以谁在用
ehcache,他们可是一目了然啊。
解决问题,修改配置,关闭更新检测:
打开 ehcache.xml 将第一行 <ehcache> 的属性 updateCheck 改为false,如下:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="false">
源码:
public class UpdateChecker extends TimerTask { private static final Logger LOG = LoggerFactory.getLogger(UpdateChecker.class.getName()); private static final long MILLIS_PER_SECOND = 1000L; private static final int CONNECT_TIMEOUT = 3000; private static final String NOT_AVAILABLE = "UNKNOWN"; private static final String UPDATE_CHECK_URL = "http://www.terracotta.org/kit/reflector?kitID=ehcache.default&pageID=update.properties"; private static final long START_TIME = System.currentTimeMillis(); public void run() { checkForUpdate(); } public void checkForUpdate() { try { if (!(Boolean.getBoolean("net.sf.ehcache.skipUpdateCheck"))) doCheck(); } catch (Throwable t) { LOG.debug("Update check failed: " + t.toString()); } } private void doCheck() throws IOException { LOG.debug("Checking for update..."); URL updateUrl = buildUpdateCheckUrl(); Properties updateProps = getUpdateProperties(updateUrl); String currentVersion = new ProductInfo().getVersion(); String propVal = updateProps.getProperty("general.notice"); if (notBlank(propVal)) LOG.info(propVal); propVal = updateProps.getProperty(currentVersion + ".notice"); if (notBlank(propVal)) LOG.info(propVal); propVal = updateProps.getProperty(currentVersion + ".updates"); if (notBlank(propVal)) { StringBuilder sb = new StringBuilder(); String[] newVersions = propVal.split(","); for (int i = 0; i < newVersions.length; ++i) { String newVersion = newVersions[i].trim(); if (i > 0) sb.append(", "); sb.append(newVersion); propVal = updateProps.getProperty(newVersion + ".release-notes"); if (notBlank(propVal)) { sb.append(" ["); sb.append(propVal); sb.append("]"); } } if (sb.length() > 0) LOG.info("New update(s) found: " + sb.toString() + ". Please check http://ehcache.org for the latest version."); } } private Properties getUpdateProperties(URL updateUrl) throws IOException { URLConnection connection = updateUrl.openConnection(); connection.setConnectTimeout(3000); InputStream in = connection.getInputStream(); try { Properties props = new Properties(); props.load(connection.getInputStream()); Properties localProperties1 = props; return localProperties1; } finally { if (in != null) in.close(); } } private URL buildUpdateCheckUrl() throws MalformedURLException, UnsupportedEncodingException { String url = System.getProperty("ehcache.update-check.url", "http://www.terracotta.org/kit/reflector?kitID=ehcache.default&pageID=update.properties"); String connector = (url.indexOf(63) > 0) ? "&" : "?"; return new URL(url + connector + buildParamsString()); } private String buildParamsString() throws UnsupportedEncodingException { ProductInfo productInfo = new ProductInfo(); StringBuilder sb = new StringBuilder(); sb.append("id="); sb.append(getClientId()); sb.append("&os-name="); sb.append(urlEncode(getProperty("os.name"))); sb.append("&jvm-name="); sb.append(urlEncode(getProperty("java.vm.name"))); sb.append("&jvm-version="); sb.append(urlEncode(getProperty("java.version"))); sb.append("&platform="); sb.append(urlEncode(getProperty("os.arch"))); sb.append("&tc-version="); sb.append("UNKNOWN"); sb.append("&tc-product="); sb.append(urlEncode(productInfo.getName() + " " + productInfo.getVersion())); sb.append("&source="); sb.append(urlEncode(productInfo.getName())); sb.append("&uptime-secs="); sb.append(getUptimeInSeconds()); sb.append("&patch="); sb.append(urlEncode(productInfo.getPatchLevel())); return sb.toString(); } private long getUptimeInSeconds() { long uptime = System.currentTimeMillis() - START_TIME; return ((uptime > -5761795191333715968L) ? uptime / 1000L : -5761795156973977600L); } private int getClientId() { try { return InetAddress.getLocalHost().hashCode(); } catch (Throwable t) { } return 0; } private String urlEncode(String param) throws UnsupportedEncodingException { return URLEncoder.encode(param, "UTF-8"); } private String getProperty(String prop) { return System.getProperty(prop, "UNKNOWN"); } private boolean notBlank(String s) { return ((s != null) && (s.trim().length() > 0)); } }
net.sf.ehcache.util.UpdateChecker
原文地址:http://chngf.blog.51cto.com/9590009/1575615