我想使用Ehcache的磁盤持久性,並能夠在重新啓動之間保持數據。我的配置是這樣的:Ehcache正在爲磁盤持久性創建不必要的時間戳目錄
<ehcache>
<diskStore path="/tmp/blah"/>
<defaultCache
eternal="true"
maxElementsInMemory="500"
overflowToDisk="false"
memoryStoreEvictionPolicy="LRU"
statistics="true"/>
<cache
name="myCache"
eternal="true"
maxElementsInMemory="10"
maxElementsOnDisk="10000"
overflowToDisk="true"
diskPersistent="true"
memoryStoreEvictionPolicy="LRU"
statistics="true"/>
</ehcache>
使用上面,我已經注意到,不僅/tmp/blah/myCache.data
被創建,但也/tmp/blah/ehcache_auto_created_<timestamp>/myCache.data
。持久數據進入時間戳文件夾,問題是緩存數據無法在重新啓動時重複使用。另外我通常沒有看到有時間戳目錄。
經過幾個小時的調試,我發現這是來自CacheManager.detectAndFixDiskStorePathConflict
方法。此方法在ALL_CACHE_MANAGERS
之上循環並檢查diskStorePath
是否匹配。這個結果是正確的(儘管在我的情況下,ALL_CACHE_MANAGERS
中只有一個CacheManager
),並且diskStorePath
變得笨拙地重命名。
日誌警告建議考慮單身人士CacheManager
。我關於緩存管理器的知識並不深,但我無意使用多個(特別是使用不同的設置)。按照文檔中的建議,我訪問net.sf.ehcache.CacheManager
的唯一方法是通過CacheManager.getInstance()
。
任何人都可以在這裏發光?這是一個錯誤?
我正在使用Ehcache版本2.4.4。
完整堆棧跟蹤:
[email protected], prio=5, in group 'main', status: 'RUNNING'
at net.sf.ehcache.CacheManager.detectAndFixDiskStorePathConflict(CacheManager.java:612)
at net.sf.ehcache.CacheManager.configure(CacheManager.java:586)
at net.sf.ehcache.CacheManager.init(CacheManager.java:359)
at net.sf.ehcache.CacheManager.<init>(CacheManager.java:228)
at net.sf.ehcache.hibernate.EhCacheRegionFactory.start(EhCacheRegionFactory.java:79)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:250)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
...
在此先感謝。