Профиль WAS Liberty - чтение свойства с использованием ClassLoader.getSystemResourceAsStream - PullRequest
0 голосов
/ 06 июля 2018

Мы переносим наше приложение с WAS 6.1 на Liberty. Наше приложение использует сторонние jar-файлы, которые читают файлы свойств по InputStream is = ClassLoader.getSystemResource("myproperty.properties"). В WAS 6.1 мы устанавливаем путь к классу сервера в расположение myproperty.properties. Мы попробовали следующие подходы, чтобы установить classpath в Liberty, но ничего не работает

Подход 1. Установите нижеприведенное в jvm.options (D: \ ConfigFiles \ DEV \ - путь, содержащий myproperty.properties)

-Djava.class.path=D:\\ConfigFiles\\DEV\\

Подход 2: Установка загрузчика классов в server.xml,

<library id="config">
 <folder dir="${server.config.dir}/config/" includes="*.properties" scanInterval="5s"/>
</library>

<enterpriseApplication id="applicationEAR" location="application.ear" name="application">
 <classloader privateLibraryRef="config"/>
</enterpriseApplication>

Пожалуйста, сообщите нам, есть ли другие способы переопределить / установить classpath в профиле Liberty?

Ответы [ 2 ]

0 голосов
/ 09 июля 2018

Попробуйте установить это свойство в jvm.options (вместо -Djava.class.path=path/to/propertyDir):

-Xbootclasspath/a:path/to/propertyDir

Это добавит путь к каталогу свойств (содержащему ваш файл ресурсов) к пути начальной загрузки JVM. Поскольку это приложение, оно также должно работать в Java 9+ (некоторые связанные параметры были удалены в Java 9).

Я подозреваю, что причина -Djava.class.path=... не работает в том, что JVM получает путь к классу из сценария сервера WLP - поэтому системное свойство по существу применяется слишком поздно при запуске серверной JVM.

Вы также можете поместить файлы свойств в каталог lib/ext вашей JVM, но я этого не проверял. Подход -Xbootclasspath/a:path работает для меня на Mac - я предполагаю, что он также будет работать на Windows.

HTH, Энди

0 голосов
/ 09 июля 2018

Если вашей конечной целью является загрузка файла свойств, более простой способ сделать это - использовать свойство bootstrap / env / system или <jndiEntry> в файле server.xml для хранения местоположения файла свойств, а затем загрузить его. Например, используя переменную окружения:

(в файле server.xml)

<server>
  <featureManager>
    <feature>jndi-1.0</feature>
    ...
  </featureManager>

  <jndiEntry jndiName="configDir" value="D:\\ConfigFiles\\Dev"/>    
</server>

Затем вы можете загрузить ресурс в вашем приложении следующим образом:

@Resource(lookup = "configDir")
String configDir;

InputStream is = new FileInputStream(configDir + "/myproperty.properties");

Или, если вы всегда будете размещать свои файлы свойств конфигурации где-нибудь под ${server.config.dir}, тогда вы можете использовать встроенную переменную окружения SERVER_CONFIG_DIR в Liberty:

String configDir = System.getenv("SERVER_CONFIG_DIR"); // equivalent to ${server.config.dir} in server.xml
InputStream is = new FileInputStream(configDir + "/myproperty.properties");

По теме управления настройкой, проверьте MicroProfile Config (например, <feature>microProfile-1.2</feature>), который вам может пригодиться:
Настройка микросервисов с помощью Liberty

...