这是我的ehcache.xml的样子:
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="false" name="defaultCache1">
<diskStore path="java.io.tmpdir" />
<defaultCache name="defaultCache" maxElementsInMemory="10000" eternal="false" statistics="true" timeToIdleSeconds="10"
timeToLiveSeconds="10" overflowToDisk="false" diskPersistent="false" memoryStoreEvictionPolicy="LRU" />
<cache name="PreferenceValueEntity" eternal="false" maxElementsInMemory="1000"
timeToIdleSeconds="5" timeToLiveSeconds="5" overflowToDisk="false" memoryStoreEvictionPolicy="LRU" />
</ehcache>
我的persistence.xml包含以下内容:
<!-- EHCache managed by hibernate -->
<property name="hibernate.cache.use_second_level_cache" value="true" />
<property name="hibernate.cache.use_query_cache" value="true" />
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory" />
<property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletonEhCacheProvider" />
<property name="net.sf.ehcache.configurationResourceName" value="/META-INF/ehcache.xml"/>
我在用着
-JPA和Hibernate 5.2.x
-ehcache-2.10.3
问题是timeToIdleSeconds是从defaultCache继承的,因此缓存在10秒而不是5秒后过期。
我不需要defaultCache,但是将其从ehcache.xml中删除会在tomcat启动时引发异常。强迫我将其添加到ehcache.xml。我知道每个ehcache文档都不是必需的,但是不确定是什么导致了它的必需。
为什么timeToLiveSeconds是从defaultCache继承的。
解决任何一个问题都可以解决我的问题,但是如果两个问题都解决了,那就太好了。
谢谢,
最佳答案
使用Hibernate时,需要创建大量的缓存。除非在配置中明确定义它们,否则将使用defaultCache
机制。
这意味着,当Hibernate需要缓存时,它将从CacheManager
请求它;如果该缓存不存在,则Ehcache将使用defaultCache
定义来创建它。
有两个选择:
根据需要配置defaultCache
确定您的应用程序需要的所有缓存名称,并明确定义它们。