大家好, 我目前的要求是使用EhCache存储和读取记录。我是EhCache实施的新手。我已阅读EhCache文档并开始实施。我已经完成了记录插入部分并且还阅读了部分内容。插入记录时,将创建* .data nd * .index文件。以下是代码。
public class Driver
{
public static void main(String[] args) {
CacheManager cm = CacheManager.create("ehcache.xml");
Cache cache = cm.getCache("test");
// I do a couple of puts
for(int i=0;i<10;i++){
cache.put(new Element("key1", "val1"));
cache.flush();
}
System.out.println(cache.getKeys());
for(int i=0;i<10;i++){
Element el = cache.get("key"+i);
System.out.println(el.getObjectValue());
}
cm.shutdown();
}
}
现在问题是 cm.shutdown()。如果我正在评论此行并注释掉插入部分并运行程序,则无法检索记录,并且* .index文件也会被删除。因此,在实际情况下,如果程序突然停止意味着我们无法在启动后读取记录。我想知道为什么文件被删除以及为什么我无法在这种情况下读取记录...控制台中的异常是
net.sf.ehcache.util.SetAsList@b66cc
Exception in thread "main" java.lang.NullPointerException
at Driver.main(Driver.java:29)...
需要输入任何输入..
答案 0 :(得分:1)
您正在做的是正确的,预期的行为也是正确的。缓存通常用于通过快速提供常用数据来增强应用程序性能,同时避免代价高昂的数据存储之旅。
并非所有应用程序都需要在系统关闭后保留缓存 - 这是您看到的默认行为(大多数应用程序将在应用程序启动时或在请求开始进入时构建缓存)。您正在缓存的数据位于堆中 - 一旦JVM死亡,缓存就会消失。现在你想坚持它超越重启?有可用的选项。结束here
我正在从同一页面复制代码片段:
DiskStoreConfiguration diskStoreConfiguration = new DiskStoreConfiguration();
diskStoreConfiguration.setPath("/my/path/dir");
// Already created a configuration object ...
configuration.addDiskStore(diskStoreConfiguration);
// By adding configuration for storing the cache in a file - you are not using default cache manager
CacheManager mgr = new CacheManager(configuration);
此外,您还必须按照here
所述配置持久性选项再次从链接中复制代码段:
<cache>
<persistence strategy=”localRestartable” synchronousWrites=”true”/>
</cache>
希望这有帮助!