Java 如何验证我的ehcache配置是否正常工作?

Java 如何验证我的ehcache配置是否正常工作?,java,spring,hibernate,ehcache,Java,Spring,Hibernate,Ehcache,我正在尝试验证我的ehcache配置是否正常工作。所以我把这个代码放在select之前和之后。我的应用程序对同一行执行“选择所有时间…”。。。我使用本教程完成了所有配置 编辑: appContext.xml: <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialec

我正在尝试验证我的ehcache配置是否正常工作。所以我把这个代码放在select之前和之后。我的应用程序对同一行执行“选择所有时间…”。。。我使用本教程完成了所有配置

编辑: appContext.xml:

<property name="hibernateProperties">
    <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
        <prop key="hibernate.show_sql">false</prop>
        <prop key="hibernate.bytecode.use_reflection_optimizer">true</prop>
        <!-- <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop> -->
        <!-- <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory 
            </prop> -->
        <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
        </prop>
        <!-- enable second level cache and query cache -->
        <prop key="hibernate.cache.use_second_level_cache">true</prop>
        <prop key="hibernate.cache.use_query_cache">false</prop>
        <prop key="net.sf.ehcache.configurationResourceName">ehcache.xml</prop>

        <prop key="hibernate.jdbc.batch_size">20</prop>
        <prop key="hibernate.jdbc.fetch_size">25</prop>
        <prop key="hibernate.order_inserts">true</prop>
        <prop key="hibernate.order_updates">true</prop>
        <prop key="hibernate.jdbc.batch_versioned_data">true</prop>
        <prop key="hibernate.hbm2ddl.auto">none</prop>

        <prop key="hibernate.c3p0.min_size">2</prop>
        <prop key="hibernate.c3p0.max_size">100</prop>
        <prop key="hibernate.c3p0.timeout">100</prop>
        <prop key="hibernate.c3p0.max_statements">0</prop>
        <prop key="hibernate.c3p0.maxIdle">-1</prop>
        <prop key="hibernate.c3p0.idle_test_period">100</prop>
        <prop key="hibernate.c3p0.acquire_increment">1</prop>
        <prop key="hibernate.c3p0.unreturnedConnectionTimeout">30</prop>
        <prop key="hibernate.c3p0.debugUnreturnedConnectionStackTraces">false</prop>
    </props>
</property>

您已禁用查询缓存:

<prop key="hibernate.cache.use_query_cache">false</prop>
false
这意味着将缓存单个实体(因为第二级缓存已打开),但不会缓存自定义查询的结果(因为您正在执行条件查询,而不是
会话。get()
)。因此,Hibernate必须转到数据库并执行查询

您需要同时启用查询缓存(以记住查询返回的实体的标识符)和二级缓存(以记住实体本身)


有关更多信息,请参阅Hibernate文档:

是否确实专门设置了ehcache日志记录?我添加了这个,并将其记录在我的日志中:15:44:55调试主ehcache.Cache-初始化缓存:blockiscsi。它是否说ehcache正在为blociIscsi类工作?但为什么在我的示例中,查询可能会继续执行相同的ID757?我认为Hibernate select语句日志只是显示引用的准备语句,实际的数据库不一定会被命中。唯一能确定我能想到的方法就是查看数据库的日志。所以。。。我启用了de-mysql日志,可以看到相同ID的所有选择,如hibernate日志所示。我的ehcache配置有一个问题。这是一个有趣的问题:)仍在研究它否,我将hibernate.cache.use\u query\u cache更改为true,但仍不工作。我不明白为什么它仍然执行查询。也许这是我的setCacheRegion中的某个功能,您可以删除setCacheRegion,只将defaultCache保留在ehcache.xml中。然后,它应该从默认配置自动创建必要的缓存。您还可以设置一些日志记录(Hibernate4使用JBoss日志记录)来查看发生了什么。
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
    monitoring="autodetect" dynamicConfig="true">

    <diskStore path="user.dir/ehcache" />

    <defaultCache maxEntriesLocalHeap="10000" eternal="false"
        timeToIdleSeconds="0" timeToLiveSeconds="1800" diskSpoolBufferSizeMB="80"
        maxEntriesLocalDisk="10000000" diskExpiryThreadIntervalSeconds="120"
        memoryStoreEvictionPolicy="LRU" statistics="true">
        <persistence strategy="localTempSwap" />
    </defaultCache>

    <cache name="blockiscsi" maxEntriesLocalHeap="10000" eternal="false"
        timeToIdleSeconds="5" timeToLiveSeconds="10">
        <persistence strategy="localTempSwap" />
    </cache>

    <cache name="org.hibernate.cache.internal.StandardQueryCache"
        maxEntriesLocalHeap="5" eternal="false" timeToLiveSeconds="120">
        <persistence strategy="localTempSwap" />
    </cache>

    <cache name="org.hibernate.cache.spi.UpdateTimestampsCache"
        maxEntriesLocalHeap="5000" eternal="true">
        <persistence strategy="localTempSwap" />
    </cache>
</ehcache>
public BlockIscsi getByKey(Long id, Long partitionId) {
Session session = null;
BlockIscsi blockIscsi = null;
try {
    session = currentSession();

    Criteria criteria = session.createCriteria(BlockIscsi.class);
    criteria.add(Restrictions.eq("id", id));
    criteria.add(Restrictions.eq("partitionId", partitionId));
    criteria.setCacheable(true);
    criteria.setCacheRegion("query.blockiscsi");

    blockIscsi = (BlockIscsi) criteria.uniqueResult();

} catch (GenericJDBCException e) {
    e.printStackTrace();
} catch (NullPointerException e) {
    e.printStackTrace();
} finally {
    session.close();
}
return blockIscsi;
}
<prop key="hibernate.cache.use_query_cache">false</prop>