Когда вызывается функция, когда есть бин ее класса?
Я хочу настроить кэширование в Spring Boot с использованием EhCache 3 и Spring Caching. Как настроить создание кэша? При каких обстоятельствах customize()
метод JCacheManagerCustomizer
называется?
Кеш предназначен для ACL Spring Security. В конце мне нужен AclCache.
Я настроил эти компоненты в классе приложения.
@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 ответ
Вы настраиваете все самостоятельно, так что вы фактически обойдете автоконфигурацию (Spring Boot ничего не сделает, так как вы указали свою конфигурацию).
Непонятно, что ты делаешь с этими Cache
выставлены как бины, так как они не будут подхвачены вашим менеджером кэша. Независимо от этого, просто вызовите этот код из первого метода, который создает CacheManager
так как вы создаете это сами.