2017-10-13 50 views
0

我使用的Spring XML bean配置试图设置咖啡因缓存。 我想有两个不同的缓存,春天的XML bean配置两个咖啡因缓存

  1. 存储 “ID”
  2. 存储 “名”

我试图做以下,

<bean id="cacheManager" class="org.springframework.cache.caffeine.CaffeineCacheManager"> 

    <property name="cacheNames"> 
     <set> 
      <value>id</value> 
      <value>name</value> 
     </set> 
    </property> 
    <property name="cacheSpecification" value="${caffeine.spec}"/> 
</bean> 

代码我在哪里使用它的样子,

@Cacheable(cacheNames = {"id"}) 
public String getId(final String key){ 
    System.out.println("no id in cache"); 
    //code 
} 

@Cacheable(cacheNames = {"name"}) 
public String getName(final String key){ 
    System.out.println("no name in cache"); 
    //code 
} 

getId()方法在某种程度上可以作为每caffeine.spec值这是在我的项目maximumSize=500,expireAfterAccess=5s。因此,如果我在5秒内调用该方法,则不会打印该消息,如果在5秒内调用该方法,则会调用该方法。但getName不起作用。它始终打印消息。 任何人都曾试图设置咖啡因缓存来设置多个缓存。

为人们寻找以上问题的答案只是注意,看起来像上述配置的实际工作,它必须有一些其他的问题,它并没有在那个时候对我的工作。

+0

其实,我不能重现你的问题。我已经使用Spring Boot创建了一个演示项目,并且这两个缓存都可以作为XML配置的魅力。你确定总是使用相同的关键参数调用'getName()'方法吗? –

+0

@DanielOlszewski有趣的是,它不适合我,所以我继续添加一个配置bean,并以编程的方式进行。除了上面的问题,我还试图为两个不同的缓存配置不同的ttl。我无法弄清楚如何使用spring bean做到这一点。在代码中做它更容易。 –

回答

1

我有类似的缓存配置问题。出现在Spring路径中选择了另一个缓存提供者(Guava),而不是Caffeine。

您必须指定使用哪个缓存提供程序 spring.cache.type = caffeine属性。但是你已经用配置bean解决了这个问题。

希望,这将节省一些时间给其他人。