jfinal如何实现缓存持久化

用的是ehcache,当服务器断开重启的时候在get缓存拿不到

评论区

JFinal

2018-05-10 16:04

ehcache.xml 中相关配置添加下面的属性:
diskPersistent="true"

jfinal 不会干预 ehcache 的行为,因此类似的功能,直接使用 ehcache 有关积累即可

zhbs_钟楠

2018-05-10 16:12

@JFinal 我已经设置了maxElementsInMemory="1"
maxElementsOnDisk="0"
eternal="true"
overflowToDisk="true"
diskPersistent="true"
缓存data文件已经是持久化到硬盘上了,但是就是重启服务器的时候cachekit.get拿到的还是null

JFinal

2018-05-10 16:56

maxElementsOnDisk=0 这个你查一下官方文档,或许是这个造成的不能持久化,总之一定可以持久化,以前我一直这么用着的

重点关注这些配置之间的相互影响

zhbs_钟楠

2018-05-11 08:55

@JFinal 我看了下磁盘了只有对应cache的data文件,没有网上说的生成个index文件,是不是少了哪个步骤还是只是单纯的配置问题?

zhbs_钟楠

2018-05-11 09:20

@JFinal 搞定了,我是这样解决的,现在系统初始化
System.setProperty(net.sf.ehcache.CacheManager.ENABLE_SHUTDOWN_HOOK_PROPERTY,"true");
然后在web.xml加入监听

net.sf.ehcache.constructs.web.ShutdownListener

在put完数据后CacheKit.getCacheManager().getCache("myCache").flush();

JFinal

2018-05-11 10:35

@zhbs_钟楠 这个方案太不优雅了,难道你在用 jfinal 开发 “非web” 项目,如果是这样的话,你得在关闭项目时手动调用一下 ehcache.stop() 方法

在 web 项目中,上面这个 stop() 方法是被自动回调的

热门反馈

扫码入社