我正尝试使用没有XML配置(ehcache.xml)的 Ehcache 3.7 ,因为该缓存的属性要针对不同的环境进行管理并且要灵活。
>但是我无法弄清楚如何使其工作,因为我正在获得“无法为Builder生成名为'rules'的高速缓存...'。
在我的日志中,我看到了在EhcacheManager中创建的“缓存规则”。这是我的代码-
我的服务实施方法-
@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中创建。
已经花了很长时间处理这个,只是无法弄清楚我错过了什么。