我正在创建一个服务(ReST),它将一直启动并运行。所以在这个服务中,我从spring上下文中调用init方法,该方法访问数据库并将所需数据加载到hazelcast实例中。
现在我必须确保通过调用init方法刷新hazelcast实例。让我们说刷新周期是每6小时一次。
有没有一种很好的清洁方法来实现这一目标?
答案 0 :(得分:1)
您可以使用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>
...
或者您可以在向缓存地图添加数据时添加时间,在指定时间后,特定缓存地图也可以清理。
答案 1 :(得分:1)
这可以通过实现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
}
}
如果这是有道理的,请告诉我。