在我的 圣杯 应用程序,我想显示 所有区域的二级缓存当前条目.

我的代码如下:

def getCacheStats() {
  StatisticsImpl stats = sessionFactory.statistics
  for (regionName in stats.secondLevelCacheRegionNames) {
    log.debug stats.getSecondLevelCacheStatistics(regionName).entries
  }
}

但是只要区域名称一切正常 不是 org.hibernate.cache.StandardQueryCache (区域用于 查询缓存)。在这种情况下,会抛出异常:

java.lang.ClassCastException: org.hibernate.cache.QueryKey cannot be cast to org.hibernate.cache.CacheKey

谷歌搜索了一下,我没有找到任何线索 如何显示缓存的查询结果集的条目列表 与地区相关 StandardQueryCacheUpdateTimestampsCache.

您能帮我找到解决方案吗?

有帮助吗?

解决方案

它相当复杂,但这应该会让你更进一步。您可以通过 SessionFactory 访问查询缓存,因此假设您有权访问它(例如通过'def sessionFactory')然后你可以像这样访问底层缓存:

def cache = sessionFactory.queryCache
def realCache = cache.region.@underlyingCache.backingCache
def keys = realCache.keys
for (key in keys) {
    def value = realCache.get(key).value
    // do something with the value
}

请注意,这些值将是长值列表。我不确定第一个代表什么(它是一个很大的值,例如5219682970079232),但其余的是缓存的域类实例的ID。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top