Я хочу настроить кеширование в Spring Boot с помощью EhCache 3 и Spring Caching. Как настроить создание кеша? При каких обстоятельствах вызывается customize()
метод JCacheManagerCustomizer
?
Кэш предназначен для списков ACL Spring Security. В конце концов мне нужен AclCache.
Я настроил эти bean-компоненты в классе приложения.
@Bean
public AclCache aclCache(Cache cache, PermissionGrantingStrategy permissionGrantingStrategy, AclAuthorizationStrategy aclAuthorizationStrategy) {
return new SpringCacheBasedAclCache(cache, permissionGrantingStrategy, aclAuthorizationStrategy);
}
@Bean
public LookupStrategy lookupStrategy(DataSource dataSource, AclCache aclCache, AclAuthorizationStrategy aclAuthorizationStrategy, PermissionGrantingStrategy permissionGrantingStrategy) {
return new BasicLookupStrategy(dataSource, aclCache, aclAuthorizationStrategy, permissionGrantingStrategy);
}
@Bean
public JdbcMutableAclService jdbcMutableAclService(DataSource dataSource, LookupStrategy lookupStrategy, AclCache aclCache) {
return new JdbcMutableAclService(dataSource, lookupStrategy, aclCache);
}
В отдельном классе я получил эти бобы:
@Configuration
@EnableCaching
public class CacheConfiguration {
@Bean
public CacheManager cacheManager() {
return new JCacheCacheManager(Caching.getCachingProvider().getCacheManager());
}
@Bean
public Cache cache(CacheManager cacheManager, JCacheManagerCustomizer cacheManagerCustomizer) {
Cache cache = cacheManager.getCache("aclCache");
return cache;
}
@Bean
public JCacheManagerCustomizer cacheManagerCustomizer() {
return new JCacheManagerCustomizer() {
@Override
public void customize(javax.cache.CacheManager cacheManager) {
org.ehcache.config.CacheConfiguration<Object, Object> config = CacheConfigurationBuilder
.newCacheConfigurationBuilder(Object.class, Object.class,
ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(100, EntryUnit.ENTRIES))
.withExpiry(ExpiryPolicy.NO_EXPIRY)
.build();
cacheManager.createCache("aclCache", Eh107Configuration.fromEhcacheCacheConfiguration(config));
}
};
}
}
Теперь кэш aclCache
должен быть создан, но не создается. Согласно этому примеру [1] так и должно быть. Размещение точки останова в методе customize()
показывает, что она не сработала. Однако вызывается JCacheManagerCustomizer.