Spring中EhCache的无XML配置
@Configuration @EnableCaching public class CachingConfig implements CachingConfigurer { @Bean(destroyMethod="shutdown") public net.sf.ehcache.CacheManager ehCacheManager() { CacheConfiguration cacheConfiguration = new CacheConfiguration(); cacheConfiguration.setName("myCacheName"); cacheConfiguration.setMemoryStoreEvictionPolicy("LRU"); cacheConfiguration.setMaxEntriesLocalHeap(1000); net.sf.ehcache.config.Configuration config = new net.sf.ehcache.config.Configuration(); config.addCache(cacheConfiguration); return net.sf.ehcache.CacheManager.newInstance(config); } @Bean @Override public CacheManager cacheManager() { return new EhCacheCacheManager(ehCacheManager()); } @Bean @Override public KeyGenerator keyGenerator() { return new SimpleKeyGenerator(); } @Bean @Override public CacheResolver cacheResolver() { return new SimpleCacheResolver(); } @Bean @Override public CacheErrorHandler errorHandler() { return new SimpleCacheErrorHandler(); } }
或者,对于测试,您可以使用不带XML的简单ConcurrentMapCache,如下所示。
@Configuration @EnableCaching public class CachingConfig implements CachingConfigurer { @Bean @Override public CacheManager cacheManager() { SimpleCacheManager cacheManager = new SimpleCacheManager(); List<Cache> caches = new ArrayList<Cache>(); caches.add(new ConcurrentMapCache("myCacheName")); cacheManager.setCaches(caches); return cacheManager; } @Bean @Override public KeyGenerator keyGenerator() { return new SimpleKeyGenerator(); } @Bean @Override public CacheResolver cacheResolver() { return new SimpleCacheResolver(); } @Bean @Override public CacheErrorHandler errorHandler() { return new SimpleCacheErrorHandler(); } }
的 编辑:已更新以在基础缓存上添加关闭方法 强> 的 编辑:添加了错误处理程序和缓存解析程序的配置 强>
我在两个抽象级别,每个技术的配置文件(Ehcache,Redis等)和一般配置文件中执行此操作。
这是Ehcache的一个(Redis会类似):
@Configuration public class EhCacheConfiguration { @Bean public EhCacheCacheManager ehCacheCacheManager() { return new EhCacheCacheManager(ehCacheManagerFactoryBean().getObject()); } @Bean public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() { EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean(); cacheManagerFactoryBean.setConfigLocation(new ClassPathResource("ehcache.xml")); cacheManagerFactoryBean.setShared(true); return cacheManagerFactoryBean; } }
这是一般的(完整的Redis钩子):
@Configuration @EnableCaching public class CachingConfiguration implements CachingConfigurer { @Qualifier("ehCacheCacheManager") @Autowired(required = false) private CacheManager ehCacheCacheManager; @Qualifier("redisCacheManager") @Autowired(required = false) private CacheManager redisCacheManager; @Bean @Override public CacheManager cacheManager() { List<CacheManager> cacheManagers = Lists.newArrayList(); if (this.ehCacheCacheManager != null) { cacheManagers.add(this.ehCacheCacheManager); } if (this.redisCacheManager != null) { cacheManagers.add(this.redisCacheManager); } CompositeCacheManager cacheManager = new CompositeCacheManager(); cacheManager.setCacheManagers(cacheManagers); cacheManager.setFallbackToNoOpCache(false); return cacheManager; } @Bean @Override public KeyGenerator keyGenerator() { return new DefaultKeyGenerator(); } }