当进程被杀死时,Ehcache不会刷新到磁盘

时间:2019-05-04 00:27:21

标签: java spring caching ehcache

我正在将Springboot 2.1.3.RELEASE与Spring Cache和Ehcache一起使用。我认为,Springboot父pom中Ehcache的默认版本为2.10.6。我正在使用Cache将所有昂贵的配置单元查询结果直接保存到磁盘,并且ehcache.xml如下所示:

<diskStore path="D:\ehcache"/> 
    <defaultCache name="default"
            maxElementsInMemory="1"
            eternal="true"
            diskExpiryThreadIntervalSeconds="120"
                  overflowToDisk="true"
                  diskPersistent="true"
            memoryStoreEvictionPolicy="LRU">
    </defaultCache>

    <cache name="myCache"></cache>

在使用IntelliJ开发应用程序的过程中,我注意到缓存有时会浪费时间,但是有时候很好。即使我不修改任何代码,结果仍然可能无法预测。我花了两天的时间进行实验,最后我发现,如果我按下Exit按钮而不是Stop(我整个职业都是Java开发人员),那么缓存并没有丢失,甚至没有一旦。但是,挑战在于,当Intellij以调试模式运行时,没有Exit按钮。我进行了研究,发现(不记得在哪里)它是故意设计的,其解释是,在运行模式下运行时,用户应用程序包装有特定的包装,后者负责接收Exit请求。并对其执行操作,但是Debug模式没有这种包装,下一步可能要做的就是仅在用户应用程序挂在断点处时评估System.exit(0)。

我的问题是,由于我不关心性能,是否可以使ehcache每次将对象保存到磁盘时都刷新到磁盘?从而使其成为止损/止损阻力?尽管我是Ehcache的新手,但我进行了很多搜索,但在我的配置中找不到任何错误。请帮忙。谢谢。

1 个答案:

答案 0 :(得分:1)

只有在关闭正确的情况下,Ehcache开源磁盘存储才会在下次启动时加载。

任何其他出口,由于应用程序崩溃,终止或其他原因,都将导致磁盘存储被认为是脏的,因此在下次启动时将其删除。

Ehcache提供了具有防崩溃磁盘存储的企业版,但是顾名思义,它不再是免费产品。

有关详细信息,请参见the documentation。请注意,链接的文档适用于版本3,但是原理相同。