如何从二级查询缓存中获取条目?
-
27-09-2019 - |
题
在我的 圣杯 应用程序,我想显示 所有区域的二级缓存当前条目.
我的代码如下:
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
谷歌搜索了一下,我没有找到任何线索 如何显示缓存的查询结果集的条目列表 与地区相关 StandardQueryCache
和 UpdateTimestampsCache
.
您能帮我找到解决方案吗?
解决方案
它相当复杂,但这应该会让你更进一步。您可以通过 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。
不隶属于 StackOverflow