Я пытаюсь сделать простой тест с ehcache - поместить элемент в кеш, очистить и закрыть кеш.Затем перезагрузите все бины с пружиной (также инициализирует cachemanager).Сделайте cache.get и получите ранее записанные значения.
Значением элемента EhCache является некоторый сериализуемый класс, называемый DOM, который содержит поле ConcurrentHasMap
Я создаю 3 экземпляра DOM: d1, d2, d3 d1(имеет карту с 3 значениями: t1, t2, t3) d2 (имеет карту с 2 значениями: x1, x2) d3 (имеет карту с 2 значениями: s1, s2)
Я звоню:
cachemanager and cache are created with spring
cache.put(new Element(1,d1))
cache.put(new Element(2,d2))
cache.put(new Element(3,d3))
cache.flush();
cacheManager.shutdown();
cache = null
cacheManager = null
Я звоню, чтобы загрузить контекст приложения Spring (который создает cacheManager и кэш)
Я звоню:
actualD1 = cache.get(1)
actualD2 = cache.get(2)
actualD3 = cache.get(3)
Я получаю DOM-объекты в actualD1, actualD2и переменные actualD3 Но проблема в том, что теперь у каждой из них есть только одно значение
actualD1 (имеет карту с 1 значением: t1) actualD2 (имеет карту с 1 значением: x1) actualD3 (имеет карту с1 значение: s1)
В чем может быть проблема! ???
Вот мой файл ehcache.xml:
<defaultCache
maxElementsInMemory="1000000"
eternal="false"
diskSpoolBufferSizeMB="100"
overflowToDisk="true"
clearOnFlush="false"
copyOnRead="false"
copyOnWrite="false"
diskExpiryThreadIntervalSeconds="300"
diskPersistent="true">
</defaultCache>
Вот как я могу создать cacheManager(этот метод вызывается при запуске из весны)
protected def checkAndCreateCacheManagerIfNeeded() =
{
if (cacheManager == null)
{
synchronized
{
if (cacheManager == null)
{
cacheManager = CacheManager.create(ehCacheConfigFile);
}
}
};
};
Следующий код создает кеш:
protected def getOrCreateCache(cacheName : String) =
{
checkAndCreateCacheManagerIfNeeded();
var cache = cacheManager.getEhcache(cacheName);
if (cache == null)
{
cacheManager.synchronized
{
cache = cacheManager.getEhcache(cacheName);
if (cache == null)
{
cache = cacheManager.addCacheIfAbsent(cacheName);
}
}
};
cache;
};