我想使用EhCache 3和Spring Caching在Spring Boot中设置缓存。如何设置缓存创建?在什么情况下调用JCacheManagerCustomizer
的{{1}}方法?
缓存用于Spring Security ACL。最后,我需要一个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。
答案 0 :(得分:0)
您要自行配置所有内容,以便有效地绕过自动配置(由于您提供了自己的配置,因此Spring Boot不会做任何事情)。
目前还不清楚您对那些暴露为bean的Cache
所做的事情,因为它们不会被缓存管理器接收。无论如何,由于您是自己创建的,因此只需从创建CacheManager
的第一个方法中调用该代码即可。