如何以编程方式确定ehcache是​​否正在运行?

时间:2011-01-08 22:14:22

标签: ehcache

我有一个配置为使用JPA和Hibernate的大型Java应用程序。它也可以配置为对实体和查询缓存使用ehcaching。但是,我打开了sql日志记录,并且没有缓存任何实体。所有实体查询都发生在每个请求上。

如何在运行时确定它是否运行ehcache以及它是否认为实体应该可缓存?

我没有写这个应用程序,所以我在这里停了一下。

它使用类的缓存声明。

正确使用Hibernate的所有其他声明来执行读/写操作。

4 个答案:

答案 0 :(得分:3)

尝试这样的事情:

List<CacheManager> tempManagers = CacheManager.ALL_CACHE_MANAGERS;
System.out.println("# of CMs : " + tempManagers.size());
for (CacheManager tempCM : tempManagers) {
        System.out.println("Got: " + tempCM.getName());
        String[] cacheNames = tempCM.getCacheNames();
        for (int i = 0; i < cacheNames.length; i++) {
            String cacheName = cacheNames[i];
            System.out.println(cacheName+" - "+ tempCM.getEhcache(cacheName).getStatistics().toString());
        }
}

答案 1 :(得分:1)

简短的回答 - 调试器。

在加载实体的位置放置一个断点并在堆栈中跟随它。看看它是否曾尝试从EHCache获取对象。另外,检查它是否在从数据库中提取后尝试将其放入缓存中。

答案 2 :(得分:0)

我是这样实现的:

    public boolean areCachesDefined() {
        return this.cacheManagers.stream()
                .anyMatch(cacheManager -> cacheManager.getCacheNames().iterator().hasNext());
    }

其中cacheManagers是具有每种缓存类型的缓存处理程序的集合(例如ehcache

答案 3 :(得分:0)

@mglauche 的解决方案非常好。此外,在启动期间,您可以搜索您的日志是否正在打印以下内容:

o.s.c.ehcache.EhCacheManagerFactoyBean : Initializing EhCache CacheManager