Zakładam, że wszystkie zbuforowane elementy znajdują się w magazynie DiskStore i chcesz, aby były zapisane w pamięci zaraz po uruchomieniu aplikacji. W anycase pomocą powinny być BootStrapCacheLoader i BootstrapCacheLoaderFactory.
Ja tylko daje pojęcia, gdzie ładujemy DiskStore do memeory po uruchomieniu aplikacji
można zaimplementować BootstrapCacheLoader który załaduje elementy cache, jak poniżej. Definicja metody: BootstrapCacheLoader.obciążenie (ehcache cache) może być
//CustomBootstrapCacheLoader implements BootstrapCacheLoader
List<?> keys = cache.getKeys();
if ((keys == null) || keys.isEmpty())
{
return;
}
for (Object key : keys)
{
Element el = cache.getQuiet(key);
cache.removeQuiet(key);
cache.putQuiet(el);
}
Nad metodą odczytuje element z DiskCache, usuwa go i umieszcza ją z powrotem tak, że pozostaje w pamięci i wersja dysku zostanie usunięty.
Wdrożenie BootstrapCacheLoaderFactory tak że
public class CustomBootstrapCacheLoaderFactory extends BootstrapCacheLoaderFactor
{
.
.
@Override
public BootstrapCacheLoader createBootstrapCacheLoader(Properties properties)
{
CustomBootstrapCacheLoader loader = new CustomBootstrapCacheLoader();
loader.setAsynchronous(getAsyncFromProperty(properties));
return loader;
}
.
.
}
Można zdefiniować konfigurację pamięci podręcznej jak poniżej CustomBootstrapCacheLoaderFactory jak poniżej
<cache
name="DummyCacheEl"
maxElementsInMemory="3500"
eternal="true"
overflowToDisk="false"
diskPersistent="true"
memoryStoreEvictionPolicy="LRU">
<bootstrapCacheLoaderFactory class="CustomBootstrapCacheLoaderFactory" properties="async=true"/>
</cache>
można iterację wszystkich wpisów na starcie? –
To właśnie robię obecnie, ale sposób, w jaki to robi jest bardzo powolny (ja nazywam metody wysokiego poziomu w pętlach, a te metody wysokiego poziomu również wywołują zapytania DB). Jeśli istnieje sposób na iterację po prostu na wszystkich wpisach bezpośrednio z EhCache API, może to być dobre. –