Linux의 JDK 1.6.0_17에서 실행되는 Java 응용 프로그램이 있습니다. 나는 아주 간단한 ehcache.xml 파일을,으로 Ehcache 2.1.0을 사용하고 있습니다 :jvm restarts 후 ehcache 디스크 저장소가 무효화되는 이유는 무엇입니까?
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);
}
:
<diskStore path="/ext/ehcache"/>
<defaultCache
overflowToDisk="true"
diskPersistent="true"
maxElementsInMemory="10000"
maxElementsOnDisk="1000000000"
eternal="true">
</defaultCache>
내 자바 응용 프로그램에서
,이 코드를
디스크 저장소 파일 (/ ext/ehcache)을 제거하고 내 응용 프로그램을 시작하면 디스크 저장소 파일을 쓰는 중임을 알 수 있습니다. 앱이 실행될 때 파일에 "ls -l"을 수행하면 "ls -l"은 시간이 지남에 따라 파일 크기가 커지고 있음을 보여줍니다.
나는 "kill -15"(SIGTERM)을 사용하여 자바 애플리케이션을 멈춘다. 다음 자바 응용 프로그램을 다시 시작하고 확인을 시작할 것. Java 응용 프로그램은 ehcache에 데이터를 계속 저장하지만 오랜 시간 동안 디스크 저장소 파일은 커지지 않습니다. "ls -l"은 항상 동일한 파일 크기를 표시합니다. 몇 시간을 기다린 후 파일이 다시 커지기 시작합니다.
디스크 저장소의 모든 내용이 무효화되고 있으며 파일 내용이 다시 채워지고 있다고 생각합니다. 그렇다면 디스크 저장소의 모든 항목이 무효화되는 이유는 무엇입니까? 앱 재시작 사이에 해당 데이터를 계속 사용하고 싶습니다.