Java 使用Guava配置Spring缓存
接下来,我可以在我的项目中使用缓存,但是如何配置guava来定义每个缓存名称的过期时间或大小 applicationConfig.xmlJava 使用Guava配置Spring缓存,java,spring,caching,guava,Java,Spring,Caching,Guava,接下来,我可以在我的项目中使用缓存,但是如何配置guava来定义每个缓存名称的过期时间或大小 applicationConfig.xml <bean id="cacheManager" class="org.springframework.cache.guava.GuavaCacheManager"/> Foo.java @Cacheable(value="courses", key="#user.id") public List<Course> getCourse
<bean id="cacheManager" class="org.springframework.cache.guava.GuavaCacheManager"/>
Foo.java
@Cacheable(value="courses", key="#user.id")
public List<Course> getCoursesByUser(User user) {
...
}
@Cacheable(value=“courses”,key=“#user.id”)
公共列表getCoursesByUser(用户){
...
}
您可以在Spring配置中为GuavacheManager指定CacheBuilder
@Bean
公共缓存管理器缓存管理器(){
GuavacheManager cacheManager=新的GuavacheManager();
cacheManager.setCacheBuilder(
缓存生成器。
newBuilder()。
expireAfterWrite(2,时间单位为秒)。
最大尺寸(100);
返回缓存管理器;
}
有关更多信息,请参阅:
您可以单独配置缓存。看 另一方面 XML
我认为@mavarazy的答案是最好的。我只是补充说,如果您需要自己的自动错过缓存配置,您可以通过以下方式完成 首先定义自己的缓存管理器,该管理器可在需要时自动创建缓存:
public class MyCacheManager extends SimpleCacheManager {
@Override
protected Cache getMissingCache(String name) {
// or different cache config if you need
return new GuavaCache(name, CacheBuilder.newBuilder().maximumSize(250).expireAfterWrite(10, TimeUnit.MINUTES).build());
}
}
现在,您可以定义缓存管理器配置:
@Bean
public CacheManager cacheManager() {
SimpleCacheManager simpleCacheManager = new MyCacheManager();
GuavaCache specificCacheConfig = new GuavaCache("specificCacheConfigName",
CacheBuilder.newBuilder().expireAfterAccess(60, TimeUnit.MINUTES).build());
simpleCacheManager.setCaches(Collections.singletonList(specificCacheConfig));
return simpleCacheManager;
}
通过扩展“CachingConfigurerSupport”类,您可以提供自定义缓存定义 比如说,
@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport {
@Bean
@Override
public CacheManager cacheManager() {
SimpleCacheManager cacheManager = new SimpleCacheManager();
GuavaCache myOrgCache = new GuavaCache("myOrgCache", CacheBuilder.newBuilder().build());
GuavaCache myEmployeeCache = new GuavaCache("myEmployeeCache",
CacheBuilder.newBuilder().expireAfterWrite(10, TimeUnit.SECONDS).build());
cacheManager.setCaches(Arrays.asList(myOrgCache, myEmployeeCache));
return cacheManager;
}
@Override
public KeyGenerator keyGenerator() {
return new CacheKeyGenerator();
}
}
参考。这是一个全局配置,是否可以通过缓存名称进行设置?我不确定全局配置是什么意思,您可以根据需要将其设置为本地配置:)例如,缓存值
courses
将在10分钟过期,但值foo
将在5分钟过期如果您希望基于密钥过期,我不知道这种功能在番石榴。若您希望在运行的系统中有几个Guava缓存,那个么这是另一回事——看看您可以使用不同的缓存构建器(具有不同的配置)创建一个单独的cacheManager。然后指定@Cacheable(value=“courses”,cacheManager=“shortTTLCacheManager”)
和@Cacheable(value=“foo”,cacheManager=“longtlcachemanager”)
public class MyCacheManager extends SimpleCacheManager {
@Override
protected Cache getMissingCache(String name) {
// or different cache config if you need
return new GuavaCache(name, CacheBuilder.newBuilder().maximumSize(250).expireAfterWrite(10, TimeUnit.MINUTES).build());
}
}
@Bean
public CacheManager cacheManager() {
SimpleCacheManager simpleCacheManager = new MyCacheManager();
GuavaCache specificCacheConfig = new GuavaCache("specificCacheConfigName",
CacheBuilder.newBuilder().expireAfterAccess(60, TimeUnit.MINUTES).build());
simpleCacheManager.setCaches(Collections.singletonList(specificCacheConfig));
return simpleCacheManager;
}
@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport {
@Bean
@Override
public CacheManager cacheManager() {
SimpleCacheManager cacheManager = new SimpleCacheManager();
GuavaCache myOrgCache = new GuavaCache("myOrgCache", CacheBuilder.newBuilder().build());
GuavaCache myEmployeeCache = new GuavaCache("myEmployeeCache",
CacheBuilder.newBuilder().expireAfterWrite(10, TimeUnit.SECONDS).build());
cacheManager.setCaches(Arrays.asList(myOrgCache, myEmployeeCache));
return cacheManager;
}
@Override
public KeyGenerator keyGenerator() {
return new CacheKeyGenerator();
}
}