Файл внешних свойств с Weblogic - PullRequest
7 голосов
/ 12 июля 2011

Я ищу лучший способ использовать файл внешних свойств с приложением, которое будет развернуто на сервере Weblogic 10.3. Я прочитал несколько статей на сайте, но не хочу жестко задавать путь к файлу свойств или помещать файл в папку domains / mydomain.

Существует ли динамический способ сделать это, чтобы при развертывании приложения файл свойств также устанавливался, например, в папку развертывания и считывался оттуда?

Большое спасибо

Ответы [ 5 ]

5 голосов
/ 14 июля 2011

Другая альтернатива, которая не требует размещения файла в месте, где другие приложения будут читать его, - это использование общих переопределений загрузки файлов: http://download.oracle.com/docs/cd/E21764_01/web.1111/e13702/config.htm#i1066493

Это включает в себя создание каталога, который будет корневым каталогом вашего развертывания, назовем его FooApplication с FooApplication.ear и FooWeb.war. Это называется каталогом установки приложений. Ваше приложение помещается в подкаталог FooApplication / app, является ли оно архивом (например, .ear, .war, jar) или взорванной версией одного из этих архивов. Ваш необязательный план развертывания (у вас должен быть один, чтобы использовать эту функцию, это может быть план, который не делает ничего, кроме указания элемента config-root и значений, как описано в документации), содержится в FooApplication / plan. Вы можете поместить свои свойства, которые хотите переопределить, в приложение в структуре каталогов FooApplication / plan / AppFileOverrides. http://download.oracle.com/docs/cd/E21764_01/web.1111/e13702/deployunits.htm#sthref9

Как только этот стиль развертывания будет выполнен, вы напишите подобный код из своего приложения, и содержимое myApp.properties будет считано из FooApplication / plan / AppFileOverrides / FooWeb.war / myApp.properties будет фактическим файлом, который является читать.

Properties myAppProps = new Properties();
InputStream iostream =
Thread.currentThread().getContextClassLoader().getResourceAsStream("myCfg/myApp.properties");
myAppProps.load(iostream);

Это достигается добавлением загрузчика классов в ваше приложение, как описано в документации. Первоначальная настройка может показаться утомительной, но эта функция напрямую удовлетворяет первоначальному вопросу и только для этого конкретного приложения.

3 голосов
/ 11 апреля 2015

Вы можете установить каталог на пути к классам и Поместить файл пользовательских свойств в эту папку / каталог.Таким образом, весь каталог вместе с файлом свойств будет в classpath.Чтобы установить каталог на classpath в weblogic 10.3.x

  • Создайте папку в папке %DOMAIN_HOME%\config\.пример appConfig.
  • Поместите файл пользовательских свойств (скажем, config.properties) в appConfig каталог / папку.
  • Измените setDomainEnv.cmd (Windows), чтобы включитьappConfig в classpath, установив %DOMAIN_HOME%\config\appConfig в качестве значения EXT_POST_CLASSPATH (эта переменная уже определена в файле setDomainEnv.cmd), как показано ниже:

    set EXT_POST_CLASSPATH=%EXT_POST_CLASSPATH%;%DOMAIN_HOME%\config\appConfig
    

Youможете получить доступ к этому файлу в вашем коде Java, как показано ниже:

    InputStream inputStream = Thread.currentThread ().getContextClassLoader().getResourceAsStream ("config.properties");
    Properties prop = new Properties();
    prop.load(inputStream);
    String value = prop.getProperty("key");

Надеюсь, это поможет.

1 голос
/ 26 марта 2014

Когда вы говорите: «Я прочитал несколько статей на сайте, но я не хочу жестко кодировать путь к файлу свойств», я предполагаю, что вы говорите, что не хотите жестко кодировать его в Java код. Если это так, пожалуйста, смотрите ниже

Ответил здесь:

Есть способы прочитать файл свойств в Java из weblogic classpath

Один (Файл свойств, расположенный в домене weblogic): Перетащите файл свойств в каталог Домена. Таким образом, файл свойств автоматически добавляется в путь к классам weblogic, и мы можем читать из Java с помощью resourceAsStream.

Два (Файл свойств из определенного пользователем местоположения). Преимущество этого подхода заключается в том, что файл свойств может находиться вне файла JAR или EAR и может быть легко изменен.

package com.test;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class PropertyFileExample {

private static Properties prop;

public static void myMethod() {

InputStream is = null;

try {

prop = new Properties();

String propFilePath = System.getProperty(“propFileLocation“);

InputStream iStream = PropertyFileExample.class.getClassLoader().getResourceAsStream(propFilePath);

prop.load(iStream);
prop.getProperty(“dbuser”);

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}
}

В weblogic setDomainEnv (под bin) нам нужно передать расположение файла свойств в качестве аргумента -D JAVA_OPTIONS

set JAVA_OPTIONS =% JAVA_OPTIONS% -DpropFileLocation = / dev / file / properties / some.properties

Надеюсь, это поможет!

1 голос
/ 12 июля 2011

Подход № 2

Использовать общую библиотеку Weblogic

http://download.oracle.com/docs/cd/E12840_01/wls/docs103/programming/libraries.html

Выполните следующие шаги

  • Упакуйте всю свою конфигурацию как отдельный JAR во время процесса сборки
  • Развертывание конфигурации JAR как общей библиотеки
  • Ссылка выше общей библиотеки из вашего EAR / WAR
  • Развертывание EAR / WAR (конфигурации будут доступны в classpath)
0 голосов
/ 12 июля 2011

Подход № 1

Обновите скрипт запуска сервера, чтобы передать системную переменную ниже JVM (ниже приведен пример для ОС Windows)

call "%DOMAIN_HOME%\bin\startWebLogic.cmd" "-Dcom.mycompany.myapp.EXTERNAL_CONFIG_PATH=/mycompany/myapp/config" %*

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

...