Я хочу настроить кэширование в 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.
[1] https://github.com/spring-petclinic/spring-petclinic-reactjs/blob/master/src/main/java/org/springframework/samples/petclinic/config/CacheConfig.java