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

原文 标签 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的新手,但我进行了很多搜索,但在我的配置中找不到任何错误。请帮忙。谢谢。

最佳答案

如果已正确关闭,则仅在下次启动时加载Ehcache开源磁盘存储。

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

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

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

相关文章:

ios - 加载Facebook视频URL时,UICollectionView卡住了

java - Swing中的按钮单击事件

java - 来自自定义表的Spring Security身份验证

caching - WebApi - Redis缓存与输出缓存

java - Spring MVC中的多个数据源交换问题。当第二个数据源不可用时,它将自动使用第一个数据源,其中引用了第二个

java - 当我认为我可以在Spring中从实体访问服务时,替换我的代码的更好的解决方案是什么?

hibernate - 使用Hibernate和EhCache进行麻烦的缓存集合

java - 创建了多少个对象

java - WS在TIBCO BW或Java中

java - 通过意图传递Arraylist