2

是否有一种可移植的方式来监视文件以了解已部署应用程序的更改?

作为一个实际示例,假设我在 Glassfish AS 中部署了一个应用程序。然后,随着应用程序的运行,我在 /META-INF 中部署了一个配置文件,该文件将由我的应用程序中的某个线程读取。

那么,如何实现呢?如何监视文件(或目录,就此而言)的更改?

4

4 回答 4

4

Java7 有一个独立于平台的解决方案来监控文件系统中的文件:

http://docs.oracle.com/javase/7/docs/api/java/nio/file/WatchService.html

以下是有关如何使用它的简短教程:

http://docs.oracle.com/javase/tutorial/essential/io/notification.html

但正如 jtahlborn 所说,如果容器不爆炸 .war 文件,则没有什么可看的。

于 2011-12-18T21:44:14.817 回答
1

我认为不可能提供这样的机制。您假设“/META-INF”在文件系统上,但我认为不需要将 Java EE 应用程序分解到文件系统。(是的,许多应用程序服务器出于各种充分的理由这样做,但我很确定这不是必需的)。

于 2011-12-18T21:21:39.193 回答
1

类加载器会大量缓存,并且在第一次读取时不再从底层文件系统更新资源。

无论如何,您都不能在纯 Java EE 中访问和操作文件系统。原因很简单 - 如果您的线程迁移到另一个节点(对于集群服务器),您的文件将不再可用。容器必须知道这些事情才能正确处理它们,并且文件系统不是“这些事情”之一。

于 2011-12-18T22:25:01.283 回答
0

请检查@jtahlborn 的答案。如果您确实有权访问文件系统,那么您有两种选择:

  • 可移植的低效方法是定期轮询文件系统并检查更改,方法是检查修改日期或文件中的 CRC(较慢)

  • 有效的方法是使用本机操作系统功能在文件更改时得到通知。查看libnotify。但是,它将需要本地本地库。

于 2011-12-18T21:36:02.000 回答