Лучший подход для горячей перезагрузки внешнего файла конфигурации в Java 1.6? - PullRequest
0 голосов
/ 12 марта 2019

Мое требование - прочитать внешний файл из онлайн-приложения и обновить некоторые статические переменные. Так как мне 1.6 и довольно старый EJB-проект, я не думаю, что у меня есть много доступных вариантов. Итак, я подумал о создании нового слушателя с использованием ServletContextListener и последующем запуске демона, который будет смотреть на указанный внешний файл (используя абсолютный путь) для загрузки значений из него.

Для мониторинга я подумываю использовать Apache Common VFS или просто написать собственный опрос потоков, чтобы проверить последний измененный атрибут файла и перечитывать каждый раз, когда он изменяется.

Но я не уверен, что эти два подхода - лучший способ сделать это. Ниже приведен фрагмент кода, который будет выполнять чтение-

Пользовательский опрос потоков, о котором я думаю, приведен ниже.

    final File file = new File(myConfigAbsolutePath);
    long prevModTime = 0;
    while (monitorActive)  { //boolean variable
        if (prevModTime != file.lastModified()) {
            //read from File here and set variables
            prevModTime=file.lastModified();
            Thread.sleep(5000);
            }
        }

Кроме этого, я думаю о чем-то вроде -

    FileAlterationObserver observer = new FileAlterationObserver(myFileDir);
    FileAlterationMonitor monitor = new FileAlterationMonitor(5000);
    FileAlterationListener listener = new FileAlterationListenerAdaptor() {
        @Override
        public void onFileCreate(File file) {
            //code here
        }
        @Override
        public void onFileDelete(File file) {
            //code here
        }
    };
    observer.addListener(listener);
    monitor.addObserver(observer);
    monitor.start();

Или VFS, как упомянуто здесь в ответе (https://stackoverflow.com/a/32331175/6751600)

    FileSystemManager fsManager = VFS.getManager();
    FileObject listenDir = fsManager.resolveFile(fileToCheck);
    DefaultFileMonitor fm = new DefaultFileMonitor(new CustomFileListener());
    fm.setRecursive(true);
    fm.addFile(listenDir);
    fm.start();

Все 3 подхода работают при инициализации через демон, но меня беспокоит, есть ли лучший способ сделать это в онлайн-приложении?

Мои требования - просто продолжать проверять, изменился ли файл, а затем перезагрузить переменные, прочитав файл. Мне нужен совет, какой из этих трех вариантов лучше подходит для онлайн-приложения, и если есть лучший способ добиться этого, то как это можно сделать.

Я заметил, что takeService take () выглядел хорошо, но, похоже, он доступен только в 1.7, а не в 1.6. Есть ли какой-нибудь пакет или что-то, что может позволить мне добавить необходимые классы для WatchService, чтобы каким-то образом включить его в 1.6? Я не настолько опытный разработчик, чтобы знать, возможно ли это вообще, и, наверное, думаю, это было бы невозможно, потому что 1.7 «каким-то образом» слушает события ОС, которые могут быть невозможны в 1.6.

Примечание. В коде могут быть синтаксические ошибки, я их скопировал и / или записал со своего мобильного телефона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...