почему хранилище дисков ehcache становится недействительным после перезапуска jvm? - PullRequest
1 голос
/ 15 июля 2010

У меня есть 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» всегда показывает одинаковый размер файла. После ожидания в течение многих часов файл снова начинает расти.

Я предполагаю, что все в хранилище дисков становится недействительным, а содержимое файла снова заполняется. Если это так, то почему все в хранилище дисков становится недействительным? Я хочу, чтобы эти данные были доступны после перезапуска приложения.

1 Ответ

4 голосов
/ 16 июля 2010

Оказывается, я забыл вызвать CacheManager.shutdown (). Добавление этого вызова решает проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...