Если вы идете строго по спецификации, вы не можете загружать файлы из сервера приложений. Вам нужно либо загрузить его с помощью загрузчика классов, либо поместить свой конфиг в базу данных.
* Загрузчик классов 1004 *
Загрузчик классов - это утилита, отвечающая за загрузку байт-кода из файлов, URL-адресов или других мест в память, где среда выполнения Java может использовать его для создания классов. Таким образом, загрузчик классов является интерфейсом между java-vm и неким хранилищем. Загрузчики классов скрывают детали доступа к ресурсам, что позволяет загружать ресурсы независимо от того, находятся ли они в файле или в других местах. На сервере приложений java хотел бы, чтобы вы не предполагали наличие доступной файловой системы (ваши классы могут поступать откуда-то еще) и загружали ресурсы исключительно через загрузчики классов.
Но, конечно, где-то в стеке загрузчик классов действительно получает доступ к файловой системе, поэтому вопрос заключается в том, как настроить это соединение. Вот где это становится проблематичным, потому что на сервере приложений есть несколько загрузчиков классов (по крайней мере, один для каждого приложения), и небезопасно делать какие-либо предположения о том, как они структурированы. Есть в основном два варианта:
- ваше приложение обычно упаковано в файл war или ear-file, который содержит классы и jar-файлы. Вы можете поместить ваш .properties-файл вместе с этими классами и загрузить его через «локальный» загрузчик классов («локальный» в кавычках, потому что это не реальный термин, и, как я уже сказал, вы не можете делать никаких предположений здесь).
- поскольку это означает, что каждый раз, когда вы захотите изменить параметры, нужно переупаковывать файл war / ear, на самом деле это не намного проще, чем пересоздать ваше приложение. Альтернатива - сделать ваш конфигурационный файл доступным для общесистемного загрузчика классов, определенного при запуске. Это настраивается переменной среды CLASSPATH (как правило, в скрипте bat / cmd / sh, отвечающем за запуск weblogic, как упоминалось другими). Таким образом, вы делаете следующее: создаете каталог для файлов конфигурации, добавляете его в CLASSPATH в сценарии запуска и загружаете с помощью следующего кода (не проверено):
// the classloader is referenced from a class, might as well use the current
ClassLoader cl = this.getClass().getClassLoader();
// getSystemResourceAsStream loads a resource using the default classloader,
// as opposed to using the classloader which "this" was loaded from
InputStream in = cl.getSystemResourceAsStream("com/me/config.properties");
вы можете загружать свойства из этого входного потока так же, как вы делали для файлов.
База данных
Еще более надежный способ - сохранить всю конфигурацию в базе данных и загрузить ее через хранилище данных с помощью JDBC. Однако по умолчанию API для загрузки из базы данных в объект Properties отсутствует, поэтому вам придется сделать это самостоятельно.
Простой дизайн будет иметь такую таблицу базы данных:
CREATE TABLE config (
key varchar(255) primary key,
value varchar(255)
)
Код для синтаксического анализа этого объекта свойств оставлен читателю в качестве упражнения (я думаю, Google может сказать вам, сделал ли кто-то что-то подобное)