Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Guava配置Spring缓存_Java_Spring_Caching_Guava - Fatal编程技术网

Java 使用Guava配置Spring缓存

Java 使用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

接下来,我可以在我的项目中使用缓存,但是如何配置guava来定义每个缓存名称的过期时间或大小

applicationConfig.xml

<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

  • 对于Java配置,它可以如下所示:
  • @Bean
    公共缓存管理器缓存管理器(){
    GuavacheManager cacheManager=新的GuavacheManager();
    cacheManager.setCacheBuilder(
    缓存生成器。
    newBuilder()。
    expireAfterWrite(2,时间单位为秒)。
    最大尺寸(100);
    返回缓存管理器;
    }
    
  • 对于XML配置,可以在guava中使用CacheBuilderSpec
  • 
    
    有关更多信息,请参阅:


    您可以单独配置缓存。看

    另一方面

    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();
        }
    }