开发环境,如何在服务重启后恢复ehcache数据

背景是通过ehcache保存session信息

一旦增加或者删除方法,都需要重启jetty,session丢失,就得重新登录

调试过程太麻烦

所以需要在jetty重启前将ehcache数据保存到磁盘,启动完成之后再恢复到内存

ehcache本身应该是支持的

但查了N多资料,翻来覆去也没试出结果,没办法来这里求助

目前做的工作:

1、ehcache.xml中:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"
         updateCheck="false" 
         dynamicConfig="false">

    <diskStore path="java.io.tmpdir/pro"/>
    
    <!-- diskPersistent:启用服务重启期间的数据恢复 -->
    
    <defaultCache 
        maxElementsInMemory="10000" 
        eternal="false"
        timeToIdleSeconds="7200"
        maxElementsOnDisk="10000000"
        diskExpiryThreadIntervalSeconds="120" 
        memoryStoreEvictionPolicy="LRU"
        overflowToDisk="true"
        diskPersistent="true">
    </defaultCache>
    
</ehcache>


2、web.xml中:

<web-app> 
    <!-- Ehcache监听器 -->
    <listener>
        <listener-class>net.sf.ehcache.constructs.web.ShutdownListener</listener-class>
    </listener>
</web-app>


3、初始化ehcache时:

System.setProperty("net.sf.ehcache.enableShutdownHook", "true");
CacheManager cacheManager = CacheManager.create();


有的资料里还说要每次get/set之后,进行flush才能生成index磁盘索引文件,这个没试过,感觉每次都flush太得不偿失了

评论区

JFinal

2018-07-03 11:17

核心配置是 diskPersistent="true", 我以前在使用的时候配置上这个就可以了

netwild

2018-07-03 14:56

@JFinal 试了很多次还是不行,最后没办法,用cookie写了另一种session实现,仅供开发模式时使用

JFinal

2018-07-03 15:00

@netwild jfinal club 中是存放在 session 表中的,拿来即用

netwild

2018-07-03 15:35

@JFinal 把session放进db,频繁读写的话不太放心

JFinal

2018-07-03 16:31

@netwild 先用 db 实现,然后中间放一个缓存提速即可,注意看 jfinal club 中的用法

netwild

2018-07-03 17:58

@JFinal 好复杂,学习学习

Victor_Li

2019-07-25 20:26

我也是不管怎么配置,能在本地生成数据,但是每次重启服务器都不能重新加载数据

热门反馈

扫码入社