我正在创建一个服务(ReST),它将一直处于启动和运行状态。因此,在此服务中,我从spring上下文调用init方法,该方法命中数据库并将所需数据加载到hazelcast实例中。
现在,我必须确保通过调用init方法来刷新hazelcast实例。假设刷新周期为每6小时一次。
有没有一种干净的好方法来实现这一点呢?
发布于 2016-03-24 00:02:47
这可以通过实现Hazelcast提供的EntryListener接口轻松实现。
实现以下方法并调用init()方法。
IMap<> map = hzInstance.getMap("mapName");
map.addEntryListener(new MyMapEventListener());
public class MyMapEventListener implements EntryListener{
@Override
public void mapCleared(MapEvent mapEvent) {
//Make your init call inside this
}
@Override
public void mapEvicted(MapEvent mapEvent) {
//Make your init call inside this
}
}让我知道这是否有意义。
发布于 2016-02-22 15:27:50
你可以使用Hazelcast eviction policy来解决这个问题。
<time-to-live-seconds>3600</time-to-live-seconds>
它每隔1小时清除一次地图内容,当有任何请求到来时,它会从加载器重新加载地图内容。
下面是Hazelcast地图配置之一
...
<!--
Maximum number of seconds for each entry to stay in the map. Entries that are
older than <time-to-live-seconds> and not updated for <time-to-live-seconds>
will get automatically evicted from the map.
Any integer between 0 and Integer.MAX_VALUE. 0 means infinite. Default is 0.
-->
<time-to-live-seconds>0</time-to-live-seconds>
...也可以在将数据添加到缓存映射的同时添加时间,在指定时间之后,特定的缓存映射也可以被清除。
https://stackoverflow.com/questions/35547564
复制相似问题