2014-09-29 69 views
0

我正在研究使用tomcat服务器以java编写的web服务(web项目)。我已经写了一些代码,用于读取文件&的内容创建此文件的散列。该文件每天都在更新,我希望每天都更新散列。但是,直到我通过tomcat服务器显式重新加载Web服务时才会发生这种情况。减少java中的文件缓存

有什么办法可以减少散列的缓存时间,或者是否应该新建散列,而不管外部重载命令?

这是怎么了我读文件:

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

您将需要启动一个后台线程,该线程会不时检查文件日期以及触发重新加载的日期。

另一种选择是使用像Guava这样的库,它有一个cache implementation最终“忘记”缓存中的项目。

注意:Guava缓存期望您可以单独加载缓存中的每个元素。在你的情况下,你想清除整个缓存。一个简单的方法就是将mcatFullDataHash作为单个项目保存在Guava缓存中。这样,您可以在CacheLoader()load()方法中创建内部缓存,并配置Guava缓存以在24小时后驱逐元素。

0

只要保留文件修改时间以及缓存并在每次访问缓存时检查它。如果它已过期,请重新加载。