1

我在我们的应用程序中使用 Apache JCS 在应用程序启动时缓存常用数据。但是,如果缓存中的某些数据直到空闲时间才使用,我想手动从数据库中重新加载该值。

所以,基本上我想覆盖 JCS 事件,以便我的 java 程序知道从缓存中删除密钥的瞬间,因为密钥达到其空闲时间。

4

1 回答 1

0

创建一个抽象类来注册您有兴趣捕获的事件。这对我来说可以捕捉这两个事件。

private static final Set<Integer> EVENTS = new HashSet<Integer>();
{
  EVENTS.add(IElementEventHandler.ELEMENT_EVENT_EXCEEDED_IDLETIME_BACKGROUND);
  EVENTS.add(IElementEventHandler.ELEMENT_EVENT_EXCEEDED_MAXLIFE_BACKGROUND);
}
@Override
 public synchronized void handleElementEvent(IElementEvent event) {
 // Check for element expiration based on EVENTS.
 LOG.debug("Handling event of type : " + event.getElementEvent() + ".");
 if (EVENTS.contains(event.getElementEvent())) {
  ElementEvent elementEvent = (ElementEvent)event;
  CacheElement element = (CacheElement)elementEvent.getSource();
  handleEvent(element);
   }

 }
// Abstract method to handle events
 protected abstract void handleEvent(CacheElement element);
}

将此抽象事件处理程序添加到 jcs 工厂定义中,如下所示

 JCS jcs = JCSCacheFactory.getCacheInstance(regionName);
 IElementAttributes attributes = jcs.getDefaultElementAttributes();
 attributes.addElementEventHandler(handler);
 jcs.setDefaultElementAttributes(attributes);
于 2012-12-11T00:33:24.737 回答