改变play应用中Ehcache的持久化策略

Change persistence strategy of Ehcache in play application

我的目标:我想配置ehcache使用硬盘驱动器进行缓存。理想情况下,缓存内容将在应用程序重新启动后继续存在。

上下文play 2.2 类路径

上具有play-cache_2.10-2.2.2.jarehcache-core-2.6.6.jar 的应用程序

尝试:我还没有尝试太多,因为第一次尝试表明我从根本上遗漏了一些东西。

我刚刚在 app/conf

下创建了一个 ehcache.xml 文件
<ehcache>
    <diskStore path="/var/myapp/persistent/cache>
    <defaultCache 
         maxBytesLocalHeap="512M" 
         eternal="false"
         timeToIdleSeconds="90000" 
         timeToLiveSeconds="0" 
         maxBytesLocalDisk="10G"
         diskExpiryThreadIntervalSeconds="120"
         memoryStoreEvictionPolicy="LFU">

        <persistence strategy="localRestartable" />

    </defaultCache>
</ehcache>

抱怨:

net.sf.ehcache.config.InvalidConfigurationException: 
Cannot use localRestartable persistence and disk overflow in the same cache
...
net.sf.ehcache.CacheManager.addCache(CacheManager.java:1177)

 play.api.cache.EhCachePlugin.cache$lzycompute(Cache.scala:143)

 play.api.cache.EhCachePlugin.cache(Cache.scala:142)

 play.api.cache.EhCachePlugin.onStart(Cache.scala:159)
...

问题:如何将持久性策略更改为与 disk overflow 不同的策略?如何配置ehcache使用硬盘缓存?

根据 EhCache 文档here

• “localRestartable” — Enables the RestartStore and copies all cache entries (on-heap and/or off-heap) to disk. This option provides fast restartability with fault tolerant cache persistence on disk. This option is available for BigMemory Go only.

BigMemory Go 是 Terracotta 的付费产品,非开源。这可能是您收到错误的原因。