2017-10-13 7 views
0

spring xml bean構成を使用してカフェインキャッシュを設定しようとしています。 私は私が2つのカフェインキャッシュを構成するSpring XML Bean

<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> 

コード、私は次のことをやってみました "名前"

を格納するための "ID"

  • を保存するために、

    1. を二つの異なるキャッシュを持ちたいですそれを使用して、

      @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を追加して、プログラム的にやりました。上記の問題に加えて私は2つの異なったキャッシュのために異なったttlを設定しようとしていました。私は春の豆を使ってそれを行う方法を理解できませんでした。それをコードで行うほうがずっと簡単でした。 –

    答えて

    1

    私はキャッシュ構成に関して同様の問題がありました。カフェインの代わりにSpringによって選択されたクラスパス(Guava)に別のキャッシュプロバイダが存在するように見えました。

    spring.cache.type = caffeineプロパティを使用して、どのキャッシュプロバイダをデフォルトにするかを指定する必要があります。しかし、これを構成Beanで解決しました。

    希望は他の人に時間を節約します。

    関連する問題