我在Linux上运行JDK 1.6.0_17上的Java应用程序。我正在使用ehcache 2.1.0,它有一个非常简单的ehcache.xml文件:
<diskStore path="/ext/ehcache"/>
<defaultCache
overflowToDisk="true"
diskPersistent="true"
maxElementsInMemory="10000"
maxElementsOnDisk="1000000000"
eternal="true">
</defaultCache>
在我的java应用程序中,我有这段代码:
private static final String CACHE_NAME = "APP";
public static void init() {
CacheManager.create();
final CacheManager manager = CacheManager.getInstance();
manager.addCache(CACHE_NAME);
}
private static Cache getCache() {
final CacheManager manager = CacheManager.getInstance();
return manager.getCache(CACHE_NAME);
}
public static Object get(String key) {
final Cache cache = getCache();
final Element element = cache.get(key);
return (element != null) ? element.getValue() : null;
}
private static void put(String key, Object value) {
final Cache cache = getCache();
final Element element = new Element(key, value);
cache.put(element);
}
如果我删除磁盘存储文件(/ ext / ehcache)并启动我的应用程序,我可以看到正在写入磁盘存储文件。如果我在应用程序运行时对文件执行“ls -l”,则“ls -l”表示文件大小随着时间的推移而变大。
然后我使用“kill -15”(SIGTERM)停止我的java应用程序。然后我重启我的java应用程序,似乎启动好了。 java应用程序继续将数据存储到ehcache中,但很长一段时间磁盘存储文件永远不会增长。 “ls -l”始终显示相同的文件大小。等了好几个小时后,文件再次开始增长。
我猜测磁盘存储中的所有内容都变得无效,并且文件的内容正在重新填充。如果是这种情况,为什么磁盘存储中的所有内容都会失效?我想在应用重启之间保持这些数据可用。
答案 0 :(得分:4)
事实证明我忘了调用CacheManager.shutdown()。添加该调用可以解决问题。