为了在我的grails应用程序中个性化ehcache,我将以下xml添加到config目录中:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" >
<diskStore path="/path/to/store/data"/>
<cacheManagerEventListenerFactory class="" properties=""/>
<defaultCache
maxEntriesLocalHeap="10000"
eternal="false"
timeToLiveSeconds="120">
<persistence strategy="none"/>
</defaultCache>
<cache name="Book"
maxEntriesLocalHeap="10000"
timeToIdleSeconds="300"
/>
<cache name="org.hibernate.cache.UpdateTimestampsCache"
maxEntriesLocalHeap="10000"
timeToIdleSeconds="300"
/>
<cache name="org.hibernate.cache.StandardQueryCache"
maxEntriesLocalHeap="10000"
timeToIdleSeconds="300"
/>
</ehcache>
令我惊讶的是,启动时,grails应用停止,但例外情况为:
Caused by: net.sf.ehcache.CacheException: Error configuring from input stream. Initial cause was null:9: Element <defaultCache> does not allow attribute "maxEntriesLocalHeap".
at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:152)
at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:99)
... 30 more
任何提示?我正在使用grails 1.3.9;感谢。
答案 0 :(得分:9)
Spring遇到同样的问题,maxEntriesLocalHeap
和maxEntriesLocalDisk
抛出相同的异常。似乎对我有用的是使用maxElementsInMemory
和maxElementsOnDisk
代替。从javadoc找到它们。
现在,基于它们被弃用,我假设有一个旧版本的EHCache继续使用我的conf以及你的。
基于this table,maxEntriesLocalHeap出现在EHCache 2.5上。在此之前它是maxElementsInMemory。当我遇到麻烦时,我使用了ehcache-spring-annotations,在撰写本文时,它是1.2.0版本,附带ehcache 2.4.5 - 因此不支持这些属性。
在寻求纯Spring配置和显式依赖EHCache 2.5之后,问题消失了,我能够使用我原本想要的属性。
答案 1 :(得分:3)
在最新版本的Ehcache(2.6.x)中添加了像'maxEntriesLocalHeapEhcache'这样的标签或者作为'persistence'的内部元素。
我会去: A)使用'maxElementsInMemory'(而不是'maxEntriesLocalHeap');使用'overflowToDisk'和'diskPersistent'属性(而不是'persistence'元素),... B)尝试获取最新版本的插件或手动将最新的jar添加到项目中。
答案 2 :(得分:0)
如果你使用Hibernate
4.3.5或4.3.7版本依赖于Ehcache 2.4.7,该版本没有maxEntriesLocalHeap和maxEntriesLocalDisk属性。
有关Ehcache 2.4.x的文档:http://ehcache.org/files/documentation/EhcacheUserGuide.pdf
我使用hibernate 4.3.5的例子:
<defaultCache maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
diskSpoolBufferSizeMB="30"
maxElementsOnDisk="10000"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU" statistics="false">
</defaultCache>
<cache
name="org.hibernate.cache.spi.UpdateTimestampsCache"
maxElementsInMemory="10000"
eternal="false">
</cache>
<cache
name="org.hibernate.cache.internal.StandardQueryCache"
maxElementsInMemory="10000"
eternal="false"
timeToLiveSeconds="300">
</cache>
<!--
If you are concerned about cpu utilisation and locking in the DiskStore, you can set the
diskExpiryThreadIntervalSeconds to a high number - say 1 day. Or you can effectively turn it off by
setting the diskExpiryThreadIntervalSeconds to a very large value
-->
<cache
name="br.com.atlantico.toi.model.calc.Anomalia"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"/>
答案 3 :(得分:0)
正如eis所说,Hibernate-ehcache内部使用ehcache 2.4.3,但属性不支持该版本。您需要使用更高版本的ehcache。
这里只是尝试添加更详细的配置:
首先,将hibernate-ehcache和ehcache-core添加到maven pom。
var container = document.getElementById("container");
var cloneTool = document.querySelector("[data-tool='clone']");
cloneTool.onclick = function() {
var elements = document.querySelectorAll("[data-test][data-cloneable]");
Array.prototype.forEach.call(elements, function(element) {
var clone = element.cloneNode(true);
container.appendChild(clone);
});
};
然后,在spring配置中设置会话工厂的属性。使用org.hibernate。中的类,而不是net.sf.ehcache中的类。
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.6.5</version>
</dependency>
答案 4 :(得分:0)
我遇到了类似的问题,我通过使用以下罐子解决了这个问题。
您在项目路径中添加以上jar ..它可以正常工作。