这是我的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
确定您的应用程序需要的所有缓存名称,并明确定义它们。

10-05 21:25