Загрузка файла свойств только при его изменении - PullRequest
1 голос
/ 12 ноября 2010

Ребята, я создал файл свойств за пределами пути к классу jboss

(я остался снаружи, потому что могу изменить во время выполнения, и значения будут отражены).

Я загружаю этот файл свойств(например, System.getProperty("jboss.base.dir.home")) каждый раз для поиска в rmi. Я думаю, что каждый раз при загрузке одного и того же файла, даже если он не изменен, это боль.

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

Ответы [ 3 ]

4 голосов
/ 12 ноября 2010

Вы можете использовать Apache для чтения файла свойств: http://commons.apache.org/configuration/userguide/howto_filebased.html#Automatic_Reloading

ИЛИ

Вы могли бы сделать это programatillcay самостоятельно. Это переопределит код Apache Commons - вероятно, с гораздо меньшим количеством тестирования и более подверженным ошибкам. Если вы настаиваете на таком подходе, вот что я думаю, вы можете сделать:

  1. Использовать класс-оболочку для экземпляра Properties.
  2. Этот класс-оболочка должен (при инициализации) загрузить файл свойств из предопределенного местоположения (возможно, настраиваемого)
  3. Оболочка post init должна запустить поток, который будет работать вечно, и сделает это:
    • записать измененную временную метку файла свойств, недавно прочитанного (см. Методы в File class)
    • сон в течение настраиваемого периода времени
    • проснуться и проверить измененную метку времени файла свойств
    • если есть разница во временных метках - перезагрузите файл свойств в экземпляр Properties. Помните, что это должно быть сделано изолированно (т. Е. Менять объект, когда к нему никто не обращается).

НТН

1 голос
/ 12 ноября 2010

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

foo.properties

Но, с другой стороны, если вы хотите изменить его, вы можете назвать его примерно так:

foo.properties-changed

Затем вы можете программно найти «-замененный» файл, загрузить его и затем удалить суффикс.

0 голосов
/ 04 июня 2014

Это решение было вдохновлено ответом javamonkey79 и тем, как горячее развертывание выполняется в JBoss EAP 6.1.0.Вместо того, чтобы переименовывать файл foo.properties при каждом его изменении, я создал дополнительный файл foo.updated в том же каталоге.Всякий раз, когда я изменяю настройки в файле foo.properties, я переименовываю foo.updated в foo.doUpdate.

В одноэлементном компоненте, который загружает настройки из файла foo.properties при запуске, прежде чем я пытаюсь получитьопределенное значение из бина, я сначала проверяю, есть ли файл foo.doUpdate в каталоге конфигурации.Если это так, я читаю настройки из файла foo.properties, а затем удаляю foo.doUpdate и создаю новый файл с именем foo.updated.

...