java应用重启导致数据丢失,使用ehcache时如何持久化数据到磁盘,而且在应用服务器重启后不丢失数据...

一、如何持久化到磁盘

使用cache.flush(),每次写入到cache后调用cache.flush() ,这样ehcache 会将索引(xxx.index)回写到磁盘。这样就不用担忧程序是否非正常退出致使缓存丢失了。

二、附上配置文件修改:html

xsi:noNamespaceSchemaLocation="ehcache.xsd" name="ehcache">

class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"

properties="peerDiscovery=manual"/>

overflowToDisk="true" diskSpoolBufferSizeMB="10" maxElementsOnDisk="1000000"

diskPersistent="true" memoryStoreEvictionPolicy="LRU">

class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" />

注意:当不需保存数据在内存中时,将maxElementsInMemory="1",而不是0,设置为0时,能够看到ehcache有warning:

2015-03-10 10:44:28,469 WARN  net.sf.ehcache.config.CacheConfiguration.warnMaxEntriesLocalHeap(CacheConfiguration.java:1601) - Cache: submitProcessInst has a maxElementsInMemory of 0. This might lead to performance degradation or OutOfMemoryError at Terracotta client.From Ehcache 2.0 onwards this has been changed to mean a store with no capacity limit. Set it to 1 if you want no elements cached in memory

三、系统初始化时添加:

System.setProperty(net.sf.ehcache.CacheManager.ENABLE_SHUTDOWN_HOOK_PROPERTY,"true");

四、在web.xml添加listener,让应用程序关闭时通知ehcachejava

net.sf.ehcache.constructs.web.ShutdownListener

五、修改ehcache源码,让它不会轻易删除index文件,由于index文件若删除了,cache数据就会清零。web

修改ehcache源码中的net.sf.ehcache.store.disk.DiskStorageFactory类中的 DiskStorageFactory 方法,注释最后else if 的代码

json

22a81d8b4c4b5765a2b308d4b282dfff.png

另外,持久化到硬盘的对象都须要是可序列化的,用如下方法处理:bootstrap a)若是类是你本身的,把他设置成可序列化

b)若是类中的某些属性是是第三方jar包的类,能够将它的字段设置成transient(不需序列化)

c)若是类中的某些属性是是第三方jar包但你必定要将全部属性都序列化,能够考虑将这些属性转化成json等

ehcache版本:ehcache-core-2.5.2.jar

集群中使用ehcache

http://www.ibm.com/developerworks/cn/java/j-lo-ehcache/

http://www.cnblogs.com/yangy608/archive/2011/10/07/2200669.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值