文件重新加载后台线程与基于请求的

时间:2017-05-19 15:26:11

标签: java web-services tomcat berkeley-db

我正在构建一个Web服务,该服务处理来自嵌入式数据库的请求,该数据库本质上是一个文件。该文件定期被另一个进程替换。

服务必须检测此更改并更新文件引用。是否更好地驱动该请求,即每个请求检查是否有更新的版本或有后台线程这样做?

2 个答案:

答案 0 :(得分:0)

我不会在每个请求上做任何与IO相关的事情。事实上,我认为服务本身不应该负责检查数据的新鲜度。所有它应该关心的是从源查找数据(执行一些非cpu密集的业务逻辑)并将其发出以便在实时Web应用程序的SLA安全范围内(我假设?)。您可以考虑以下可能性:

  • 后台线程(如您所述)是保留的轮询器 检查和更新文件。
  • 基于事件的设计(pub-sub),当文件更改触发时会通知您的应用更新 内容。

答案 1 :(得分:0)

我认为应该像后台进程一样通知订阅者注册事件。你可以使用文件监听器来实现这个目的。下面的例子是一个基于轮询的模型。

 WatchService watcher = FileSystems.getDefault().newWatchService();

    Path dir = Paths.get("Path/To/Watched/Directory");
       dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);