在我的Wicket应用程序中,我使用StringResourceLoaders作为我的文本资源。 文本键和值从属性文件和数据库加载。
我已经创建了一个用于存储和获取文本资源的服务类,这里我还有一个计划任务,每15分钟更新一次文本资源。
当执行此任务时,我首先更新文本资源,之后我想清除资源缓存以使Wicket使用更新的文本。
我的问题是没有清除缓存。以下是我尝试这样做的方法......
@Scheduled(fixedDelay=15*60*1000) // 15 minutes
private void taskUpdateTextResources() {
updateTextResources();
Application.get().getResourceSettings().getPropertiesFactory().clearCache();
}
这显然不是清除资源的正确方法,但是我该怎么做呢?
答案 0 :(得分:0)
要定期使资源缓存无效,您可以设置ResourcePollFrequency。
将此添加到应用程序的init方法中,所有资源应每15分钟重新填充一次。
getResourceSettings().setResourcePollFrequency(Duration.minutes(15));
答案 1 :(得分:0)
问题现在解决了。我发现Application.get()返回null(非常尴尬)。
我必须将Application添加为成员变量。
以下是解决方案:
@Inject
Application application;
@Scheduled(fixedDelay=15*60*1000) // 15 minutes
private void taskUpdateTextResources() {
updateTextResources();
application.getResourceSettings().getPropertiesFactory().clearCache();
}