Как получить доступ к файлу свойств, используя Java с помощью Weblogic Server? - PullRequest
4 голосов
/ 19 января 2012

У меня есть один файл свойств .properties, и я могу загрузить этот файл в отдельный класс Java, как показано ниже:

Properties props = new Properties();
try {
    FileInputStream fis =
        new FileInputStream("D:\\Examples\\Simple\\src\\properties.xml");
    props.loadFromXML(fis);
    // props.list(System.out);
    path = props.getProperty("path");
    System.out.println("\nThe path property: "
        + props.getProperty("path"));
    props.load(new FileInputStream(path));
    filePath = props.getProperty("path");
    System.out.println(filePath);
}
catch (IOException e) {
    e.printStackTrace();
}

Теперь мне нужно реализовать логику, которая позволит мне загружать файл свойств с помощью Weblogic Server.,Таким образом, в основном, когда я что-то изменяю в файле .proprties, мне не нужно каждый раз создавать приложение, и оно может быть интегрировано с сервером.Я использую Jdeveloper и Weblogic Server 10.3.Как настроить файл свойств с помощью файлов Java на сервере?

Ответы [ 3 ]

1 голос
/ 19 января 2012

Если вы идете строго по спецификации, вы не можете загружать файлы из сервера приложений. Вам нужно либо загрузить его с помощью загрузчика классов, либо поместить свой конфиг в базу данных.

* Загрузчик классов 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 может сказать вам, сделал ли кто-то что-то подобное)

1 голос
/ 19 января 2012

В вашем командном файле запуска веб-логики добавьте строку ниже

set JAVA_OPTIONS =% JAVA_OPTIONS% -DconfigFile = путь к файлу

В вашей Java-программе получите путь к файлу, используя

String filePath = System.getProperty("configFile");
0 голосов
/ 19 января 2012

Если вы хотите иметь возможность изменить местоположение файла без перестройки приложения, то извлеките это местоположение, например, передав системное свойство на сервер weblogic:

-Dmy.properties.location=D:/foo/bar.properties

Если вы хотите иметь возможность перезагрузить содержимое файла во время выполнения, не перезагружая сервер, то читайте файл каждый раз, когда вам нужно получить доступ к одному из его свойств (медленный), или используйте, например, настройку общих ресурсов Apache. , который может перезагрузить файл свойств при их изменении.

...