Надеюсь, этот ответ не смутит вас, если это так, возможно, просто попросит более простое решение.
Банки не являются хорошим местом для хранения изменчивой конфигурации. Вы можете поместить конфигурацию по умолчанию в файл jar. Файл jar не доступен для записи, поэтому ваша программа не может перезаписать конфигурацию, чтобы обновить ее, если она находится в банке.
Для приложений, для которых требуется конфигурация конкретного пользователя, я был бы настроен на сохранение конфигурации в каталоге $USER_HOME/.myapp
. Преимущество использования файловой системы для конфигурации, а не базы данных или API-интерфейсов java, заключается в том, что конфигурацию можно легко просмотреть и отредактировать с помощью стандартного текстового редактора.
Пример кода для определения домашнего каталога для конфигурации вашего приложения:
String configHome = System.getProperty("myapp.home",
System.getProperty("user.home") + "/.myapp"
);
Вы можете получить доступ к ресурсам для конфигурации по умолчанию из файла фляги и скопировать их в файлы в файловой системе. Затем пользователь может вручную отредактировать файлы в файловой системе, чтобы настроить приложение. Или вы можете предоставить пользовательский интерфейс, который вы создадите для пользователя, чтобы изменить информацию в файлах.
Примером такого подхода является класс OsiamHome, который является одним из самых приятных способов настройки конфигурации для приложения Java (это приложение-сервер, но общий принцип может быть использован для клиентского приложения) , Ссылка osiam представляет собой приложение Spring, так что ему может быть предоставлена некоторая поддержка конфигурации, предоставляемая Spring, в частности PathMatchingResourcePatternResolver, которая помогает рекурсивно искать банку, чтобы найти все ресурсы конфигурации по умолчанию для приложения.
Однако, возможно, вам не нужны дополнительные средства, предусмотренные подходом Spring. Вместо этого вы можете просто сохранить список в коде всех файлов в конфигурации по умолчанию и поместить файлы в каталог /resources/config
в исходное дерево. Процесс сборки скопирует конфигурацию по умолчанию в ваш файл jar для развертывания. Когда приложение запускается, если каталог конфигурации в файловой системе не существует, приложение может считывать стандартные файлы конфигурации из вашего файла jar и копировать конфигурационные ресурсы в файлы в файловой системе. Затем файлы конфигурации могут быть изменены и изменены как можно больше.
Некоторые другие варианты у вас есть для управления конфигурацией за пределами вашего приложения баночке являются:
- Место сведения о конфигурации в базе данных ИЛИ
- Используйте Java preferences API ИЛИ
- Использование системы упаковки, например, rpm или (возможно) инструмент javapackager или javafx maven plugin, который объединяет конфигурацию по умолчанию в собственный пакет развертывания. Программное обеспечение для развертывания собственной ОС может извлечь конфигурацию и скопировать ее в указанное вами местоположение. Обычно это местоположение будет стандартным местоположением конфигурации для ОС, например
/etc/myapp
для Linux для системной конфигурации или $USER_HOME/.myapp
для конфигурации пользователя.
Как вы используете 'configPath' после этого? – Tunaki
Вы считали 'src \ main \ resources \ config'? – vikingsteve
Tunaki: Я использую configPath для загрузки (и сохранения) конфигурации со свойствами. vikingsteve: см. Комментарий ниже. – Ronon