Абстракция кеша Spring не предоставляет хранилище кеша.Конфигурация CacheManager необходима для настройки фактического хранилища.
Вот пример реализации с использованием Guava, который поддерживает выселение на основе времени:
Добавление зависимости от guava
Maven:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>27.0-jre</version>
</dependency>
Gradle:
compile 'com.google.guava:guava:27.0-jre'
Добавьте класс для настройки кэширования
import com.google.common.cache.CacheBuilder;
import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.concurrent.ConcurrentMapCache;
import org.springframework.cache.concurrent.ConcurrentMapCacheManager;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.cache.interceptor.SimpleKeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.TimeUnit;
@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport {
@Bean
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager() {
@Override
protected Cache createConcurrentMapCache(final String name) {
return new ConcurrentMapCache(name, CacheBuilder.newBuilder()
// You can customize here the eviction time
.expireAfterWrite(1, TimeUnit.HOURS)
.build()
.asMap(),
false);
}
};
}
@Bean
public KeyGenerator keyGenerator() {
return new SimpleKeyGenerator();
}
}
Наконец, добавьте аннотацию @Cacheable("CacheName")
к методу, для которого вы хотите получить результатыбыть кэшированным