我正在使用tomcat服务器编写用java编写的Web服务(Web项目)。我已经写了一些用于阅读文件内容的代码。创建此文件的哈希值。该文件每天都在更新,我希望每天都更新哈希值。但是直到我通过tomcat服务器显式重新加载Web服务才会发生这种情况。
有没有办法减少哈希的缓存时间,或者是否应该新建哈希而不管外部重载命令?
我正在阅读文件:
static Map<String, Object> mcatFullDataHash;
BufferedReader br = new BufferedReader(new FileReader("mcat_group.tsv"));
while ((line = br.readLine()) != null)
{
HashMap<String, Object> mcatInfo = new HashMap<String, Object>();
line_elements = line.split("\\t");
mcatInfo.put("groupid",line_elements[2]);
mcatInfo.put("catid",line_elements[1]);
mcatInfo.put("no_to_show_mcat", line_elements[4]);
mcatFullData.put(line_elements[0],mcatInfo);
}
mcatFullDataHash是我正在阅读内容的哈希。
答案 0 :(得分:0)
您需要启动一个后台线程,该线程会不时地检查文件日期,并触发重新加载。
另一个选择是使用像Guava这样的库,其cache implementation最终会忘记&#34;关于缓存中的项目。
注意:Guava缓存需要您可以单独加载缓存中的每个元素。在您的情况下,您想要清除整个缓存。一种简单的方法是将mcatFullDataHash
保存为Guava缓存中的单个项目。这样,您可以在load()
的{{1}}方法中创建内部缓存,并配置Guava缓存以在24小时后逐出该元素。
答案 1 :(得分:0)
只需将文件修改时间与缓存一起保存,并在每次进入缓存时进行检查。如果它已过期,请重新加载。