如何自由地自动重新加载更改文件

How to automatically reload a changing file in liberty

专家。

当文件在 Liberty 中自动更新时,我需要重新加载它。为了更清楚,我想自由地创建一个像"dropins"这样的路径,它可以自动检测文件的变化,或者我们可以手动扫描这个文件夹。当文件改变时,我需要加载这个文件夹中的文件。

我不知道如何做到这一点.... 这里有人知道吗?

谢谢!

如果您不反对 writing a Liberty feature(不难,但需要一些背景阅读),那么您可以通过将 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());
        }
    }
}

希望这对您有所帮助,

安迪