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

And*_*rew 5 ehcache

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

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

我没有写这个应用程序,所以在这里有些卡住了。

它使用声明进行类的缓存。

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

mgl*_*che 6

尝试这样的事情:

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());
        }
}
Run Code Online (Sandbox Code Playgroud)


rfe*_*eak 2

简短的答案 - 调试器。

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