2017-12-13 8 views
0

予想外のことです。 今、私はリストの要素にPut操作をしています。その要素に対して操作は成功し、キャッシュも更新されます。 しかし、私は私の更新キャッシュが働いているかどうか、私はここでは代わりに、全リストの更新された応答でちょうど要素春@CachePut応答は、私は、リストを取得するには、Get操作を実行し、期待通りcache.Itで応答が正常に動作している保存された私はSpringBoot</p> <p>でEhcacheのを使用しています

を得た をテストするために、リストを取得するために、操作を再取得やっているコードスニペットです:

@Override 
@Cacheable(value = "practiceId", key="#practiceId", unless="#result==null") 
public List<ExposedLocation> getLocations(String practiceId) { 
    // getLocations list logic 
} 
@CachePut(value = "practiceId", key ="#practiceId") 
public List<ExposedLocation> updateLocation(List<LocationDB> locationList, String practiceId) { 
    //Update location logic 
} 

ehcache.xml:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="false"> 
<cache name="practiceId" maxEntriesLocalHeap="200" eternal="false" 
    memoryStoreEvictionPolicy="LFU" timeToLiveSeconds="600" 
    timeToIdleSeconds="200"> 
</cache> 

だから、レスポンスの私の分析によると、私が使用したいくつかのテストケース GetとPutのレスポンスが異なるので、@CachePutは最初にキャッシュを削除し、新しいキャッシュを作成して を作成し、新しいキャッシュに更新の応答を入れていると結論づけました。

更新された要素を含む完全なリストを取得するには誰でも私を助けてください。 ここで@CachePut ??????を設定できません

答えて

0

Springキャッシュの抽象化は、どちらのメソッドからも同じキーの下に結果をキャッシュすることによって求められるものです。 実際にメソッドが異なる結果を返す場合、それが問題の根本です。

このリストが現在キャッシュされているものとマージされることをキャッシュに伝えるための組み込みサポートはありません。

+0

あなたは、以前のキャッシュのバックアップのロジックを追加し、新しいキャッシュにマージする必要があると言っています。 –

+0

どちらか、または両方のメソッドが同じ結果を返すかどうかを確認してください。 –

関連する問題