У меня есть Java-приложение, работающее на JDK 1.6.0_17 в Linux. Я использую 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» показывает, что с течением времени размер файла увеличивается.
Затем я прекращаю работу Java-приложения с помощью команды «kill -15» (SIGTERM). Затем я перезагружаю мое приложение Java, и оно запускается нормально. Приложение Java продолжает хранить данные в ehcache, но в течение долгого времени файл хранилища дисков никогда не увеличивается. «ls -l» всегда показывает одинаковый размер файла. После ожидания в течение многих часов файл снова начинает расти.
Я предполагаю, что все в хранилище дисков становится недействительным, а содержимое файла снова заполняется. Если это так, то почему все в хранилище дисков становится недействительным? Я хочу, чтобы эти данные были доступны после перезапуска приложения.