2017-10-13 80 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解決了這個問題。

希望,這將節省一些時間給其他人。