0

在我的 Wicket 应用程序中,我使用 StringResourceLoaders 作为文本资源。文本键和值是从属性文件和数据库加载的。

我创建了一个用于存储和获取文本资源的服务类,在这里我还有一个计划任务,它每 15 分钟更新一次文本资源。

当这个任务执行时,我首先更新文本资源,然后我想清除资源缓存以使 Wicket 使用更新的文本。

我的问题是缓存没有被清除。这是我尝试做的方法......

@Scheduled(fixedDelay=15*60*1000) // 15 minutes
private void taskUpdateTextResources() {
    updateTextResources();
    Application.get().getResourceSettings().getPropertiesFactory().clearCache();
}

这显然不是清除资源的正确方法,但是我该怎么做呢?

4

2 回答 2

0

要定期使资源缓存失效,您可以设置 ResourcePollFrequency。

将此添加到应用程序的 init 方法中,所有资源应每 15 分钟重新轮询一次。

getResourceSettings().setResourcePollFrequency(Duration.minutes(15));
于 2013-05-31T09:49:55.403 回答
0

现在问题已经解决了。我发现 Application.get() 返回 null (很尴尬)。

我必须将应用程序添加为成员变量。

这是解决方案:

@Inject
Application application;


@Scheduled(fixedDelay=15*60*1000) // 15 minutes
private void taskUpdateTextResources() {
    updateTextResources();
    application.getResourceSettings().getPropertiesFactory().clearCache();
}
于 2013-05-31T11:17:30.330 回答