专家。
当文件在 Liberty 中自动更新时,我需要重新加载文件。为了更清楚,我想在自由中创建一个像“dropins”这样的路径,它可以自动检测文件的变化,或者我们可以手动扫描这个文件夹。我需要在更改时加载此文件夹中的文件。
我不知道如何实现这一目标....这里有人知道吗?
谢谢!
专家。
当文件在 Liberty 中自动更新时,我需要重新加载文件。为了更清楚,我想在自由中创建一个像“dropins”这样的路径,它可以自动检测文件的变化,或者我们可以手动扫描这个文件夹。我需要在更改时加载此文件夹中的文件。
我不知道如何实现这一目标....这里有人知道吗?
谢谢!
如果您不反对编写 Liberty 功能(不难,但需要一点背景知识),那么您可以通过将com.ibm.wsspi.kernel.filemonitor.FileMonitor
接口实现为声明式服务来注册一个侦听器以了解对特定文件的更改。一旦注册为 DS,Liberty 文件监视器将调用您的实现方法。它onBaseline(Collection<File> baseline)
在启动时调用,并onChange(Collection<File> createdFiles, Collection<File> modifiedFiles, Collection<File> deletedFiles)
在发生某种变化时调用。
一种实现可能如下所示:
@Component(immediate="true", property={"monitor.directories=/path/to/myMonitoredDir"})
public class MyFileMonitor implements FileMonitor {
@Override
public void onBaseline(Collection<File> baseline) {
System.out.println("Initial file state:");
for (File f : baseline) {
System.out.println(f.getName());
}
}
@Override
public void onChange(Collection<File> createdFiles, Collection<File> modifiedFiles, Collection<File> deletedFiles) {
System.out.println("Newly added files:");
for (File f : createdFiles) {
System.out.println(f.getName());
}
System.out.println("Newly deleted files:");
for (File f : deletedFiles) {
System.out.println(f.getName());
}
System.out.println("Modified files:");
for (File f : modifiedFiles) {
System.out.println(f.getName());
}
}
}
希望这可以帮助,
安迪