Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 在磁盘上维护持久性拷贝时进行ECache刷新_Spring_Caching_Refresh_Persistence_Ehcache - Fatal编程技术网

Spring 在磁盘上维护持久性拷贝时进行ECache刷新

Spring 在磁盘上维护持久性拷贝时进行ECache刷新,spring,caching,refresh,persistence,ehcache,Spring,Caching,Refresh,Persistence,Ehcache,我正在使用Spring框架和JavaCXF服务 我的项目要求每隔15分钟从数据库刷新一次缓存。从数据库中提取数据平均需要一分钟。所以,当这一分钟的操作缓存从db刷新时,如果我尝试访问缓存,它应该返回以前存储的值 时间线是-> 0分钟:应用程序启动。缓存刷新的触发器 0.5分钟:正在通过查询数据库加载缓存 1分钟:缓存已加载,例如:xyz 5分钟:已访问缓存并返回xyz 15分钟:缓存应刷新新缓存值将在16分钟时为xyw 15.5分钟:正在通过查询数据库加载缓存。此时,如果访问缓存,它应该返回以前

我正在使用Spring框架和JavaCXF服务

我的项目要求每隔15分钟从数据库刷新一次缓存。从数据库中提取数据平均需要一分钟。所以,当这一分钟的操作缓存从db刷新时,如果我尝试访问缓存,它应该返回以前存储的值

时间线是->

0分钟:应用程序启动。缓存刷新的触发器

0.5分钟:正在通过查询数据库加载缓存

1分钟:缓存已加载,例如:xyz

5分钟:已访问缓存并返回xyz

15分钟:缓存应刷新新缓存值将在16分钟时为xyw

15.5分钟:正在通过查询数据库加载缓存。此时,如果访问缓存,它应该返回以前的缓存值,因为新缓存现在处于不一致状态。应该返回xyz

16分钟:缓存已重新加载。如果现在访问,则应返回xyq

我有两个问题:

现在我有一个spring任务调度器,每15分钟刷新一次缓存。我能处理ehcache本身吗? 我的ehcache.xml看起来像: 如何实现此缓存在15.5分钟内的行为? 答复:

Ehcache有一个使用Quartz调度器的定时刷新装饰器。有关如何使用它,请参见此。 除非使刷新过程具有事务性,否则Ehcache不会提供此行为。否则,您将在获取键时命中映射到该键的任何值。
<ehcache>
    <cache name="mycache" 
        maxElementsInMemory="3000"
        eternal="false" 
        timeToIdleSeconds="60000"  
        timeToLiveSeconds="60000"  
        overflowToDisk="true"  
        diskPersistent="false" />
        <persistence strategy="localTempSwap" synchronousWrites="true" />
    </cache>  
</ehcache>