在我的应用程序中,我为 EhCache 包含了以下 xml 配置(ehcache-core 版本 2.4.3)
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="false"
monitoring="autodetect"
dynamicConfig="true">
<defaultCache
eternal="false"
timeToIdleSeconds="0"
timeToLiveSeconds="0">
</defaultCache>
<cache name="MyParamsCache"
eternal="true"
overflowToDisk="true"
diskSpoolBufferSizeMB="20"
memoryStoreEvictionPolicy="LRU"
statistics="true">
</cache>
</ehcache>
缓存管理器被声明为
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="ehcache" />
</bean>
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache.xml" />
</bean>
使用一个 bean,我将参数添加到这个缓存中(通过在 Spring 中自动装配 cacheManager)。应用程序中没有错误,但是当我检查 JavaMelody(数据现金部分)中的缓存时,我看到它MyParamsCache
出现了两次。一个实例充满了内容,而另一个是空的。
有谁知道为什么MyParamsCache
出现两次以及如何删除虚拟实例?
已编辑
我在persistence.xml 中也有休眠二级缓存。缓存 bean 在那里再次创建,而不是使用已经存在的。代码是
<persistence-unit name="myPU">
.....
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect" />
<property name="hibernate.hbm2ddl.auto" value="validate" />
<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" />
</properties>
</persistence-unit>