java - 减少java中的文件缓存

标签 java tomcat file-io hash bufferedreader

我正在使用 tomcat 服务器开发一个用 java 编写的网络服务(网络项目)。我已经编写了一些代码来读取文件的内容并创建该文件的哈希值。该文件每天都在更新,我希望散列也每天更新。但这不会发生,直到我通过 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 是我正在阅读内容的哈希值。

最佳答案

您需要启动一个后台线程来不时检查文件日期并触发重新加载。

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

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

关于java - 减少java中的文件缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26098977/

相关文章:

Java:如何将剪贴板上的图像粘贴(附加)到word文档

delphi - 文件操作 - 复制和移动 - Delphi

c++ - 有没有更好的方法来处理缓冲区和读取中的不完整数据?

apache - Tomcat 关闭时禁用 Apache 503 响应

java - 在 eclipse 的浏览器中运行 java servlet 时解析 localhost 时出错

c - 字符数组必须大于必要的数组

java - 检查 JSON 节点是否为 null

java - 字符串的最后一个子串

java - 如何从 spring boot gradle 插件 buildBootImage 切换到不同的 jdk 发行版

java - JPA 是否要求数据源来自 JNDI?