Hazelcast 3.0.2 を Spring 抽象化で動作させようとしていますが、TTL 機能が動作していないようです。
次の方法で春のコンテキストを構成しました
<cache:annotation-driven cache-manager="cacheManager" mode="proxy" proxy-target-class="true" />
<bean id="cacheManager" class="com.hazelcast.spring.cache.HazelcastCacheManager">
<constructor-arg ref="hzInstance" />
</bean>
<hz:hazelcast id="hzInstance">
<hz:config>
<hz:group name="instance" password="password" />
<hz:properties>
<hz:property name="hazelcast.merge.first.run.delay.seconds">5</hz:property>
<hz:property name="hazelcast.merge.next.run.delay.seconds">5</hz:property>
<hz:property name="hazelcast.logging.type">slf4j</hz:property>
<hz:property name="hazelcast.jmx">true</hz:property>
<hz:property name="hazelcast.jmx.detailed">true</hz:property>
</hz:properties>
<hz:network port="8995" port-auto-increment="true">
<hz:join>
<hz:tcp-ip enabled="true">
<hz:interface>10.0.5.5</hz:interface>
<hz:interface>10.0.5.7</hz:interface>
</hz:tcp-ip>
</hz:join>
</hz:network>
<hz:map name="somecache"
backup-count="1"
max-size="0"
eviction-percentage="30"
read-backup-data="false"
time-to-live-seconds="120"
eviction-policy="NONE"
merge-policy="hz.ADD_NEW_ENTRY" />
</hz:config>
</hz:hazelcast>
次に、次のメソッドを持つ簡単なテスト クラスを作成しました。
@Cacheable("somecache")
public boolean insertDataIntoCache(String data) {
logger.info("Inserting data = '{}' into cache",data);
return true;
}
また、Hazelcast が見つけたすべてのマップと内部の全体からいくつかの情報を出力する方法も作成しました。データの挿入とキャッシュは正常に機能しているようですが、TTL を 120 秒に設定してもエントリが期限切れになることはありません。
キャッシュからデータを書き込むと、「somecache」と呼ばれる 1 つのマップがあり、そのマップの TTL が 120 秒であることがわかりますが、エントリをループすると、挿入したすべてのエントリの有効期限が 0 であることがわかります。私は hazelcast の動作であると想定されているものではありません (マップ ttl がエントリ ttl よりも優先される可能性があります) が、いずれにせよ有効期限が切れることはありません。
3.0.2 とスプリング キャッシュの問題を知っている人はいますか? また、Hazelcast の古いバージョンを実行している同じアプリケーション サーバーに他のアプリケーションがあることにも言及する必要がありますが、それらには独自の構成があり、私のテスト アプリケーションはそれ自体を保持しており、何とも競合していないようです。
どんな入力でも大歓迎です。
編集1:
HZ 2.6.3 を使用するようにダウングレードするとうまくいくように見えるので、TTL に関して hazelcast 3 のどこかにバグがあるようです