Я пытаюсь использовать Ehcache 3.7, без конфигурации XML (ehcache.xml) , поскольку свойства кэша должны управляться для различных сред и должны быть гибкими.
Но я не могу понять, как заставить его работать, поскольку я получаю «Не могу найти кэш с именем« rules »для Builder ...».
В моих журналах я вижу, что «Кэш»правила, созданные в EhcacheManager.А вот мой код -
Метод реализации My Service -
@Override
@Cacheable(value = "rules", key = "#rulesName + #ruleStatus")
public RulesResponse getCallSegmentationRules(String[][] rulesName, String ruleStatus) {
// returns RulesResponse object
...
Мой класс CacheConfig -
@Slf4j
@Configuration
@EnableCaching
public class EhcacheConfiguration {
@Bean
public CacheManager cacheManager() {
return CacheManagerBuilder.newCacheManagerBuilder()
.withCache("rules", cacheConfiguration())
.build(true);
}
public CacheEventListenerConfigurationBuilder cacheEventListenerConfigurationBuilder() {
CacheEventListenerConfigurationBuilder cacheEventListenerConfiguration = CacheEventListenerConfigurationBuilder
.newEventListenerConfiguration(new EhcacheEventListener(),
EventType.CREATED,
EventType.UPDATED,
EventType.EVICTED,
EventType.REMOVED,
EventType.EXPIRED)
.unordered().asynchronous();
return cacheEventListenerConfiguration;
}
public CacheConfiguration cacheConfiguration() {
CacheConfiguration<String, RulesResponse> configurationBuilder =
CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class,
RulesResponse.class,
ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(10, MemoryUnit.MB))
.add(cacheEventListenerConfigurationBuilder())
.withExpiry(ExpiryPolicyBuilder.timeToLiveExpiration(Duration.ofSeconds(10)))
.build();
log.info("Created EhcacheConfiguration");
return configurationBuilder;
}
}
Я переопределяю - spring.main.allow-bean-definition-overriding=true
Это приводит к тому, что «Невозможно найти имя кэша« правила »».Но в журналах говорится, что в EhcacheManager был создан кэш «правил».
Долго работал с этим, просто не могу понять, что мне не хватает.