Как установить параметр для веб-приложения Java

У меня есть веб-приложение на Java, которое использует некоторую внешнюю программу (вызывает инструмент командной строки).

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

Вопросы:

1) Какой именно параметр следует использовать (из доступных в web.xml), если он установлен только один раз (при развертывании) и после этого никогда не изменяется?

2) Как я могу получить доступ к этому параметру в своем Java-коде?

Заранее спасибо

Дмитрий

Ответ 1

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
  <context-param>
    <param-name>command</param-name>
    <param-value>SOME_COMMAND</param-value>
  </context-param>
.
.
.
.
</web-app>

Java-код

String commandToExecute =  getServletContext().getInitParameter("command");

В качестве альтернативы

Вы также можете поместить эту вещь в файл property/xml в classpath, чтобы прочитать ее и поместить в контекст сервлета, когда инициализируется контекст.

Ответ 2

Вы можете использовать env-entry:

<env-entry>
    <description>command line</descriptor>
    <env-entry-name>commandLine</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>some_command</env-entry-value>
</env-entry>

И получить его из любого места в вашем коде webapp:

javax.naming.Context ctx = new javax.naming.InitialContext();
String command = (String) ctx.lookup("java:comp/env/commandLine");

Ответ 3

В этом случае я бы пошел с системным свойством. Просто запустите сервер приложений с флагом JVM как -Dyour.command.path=/path/to/your/command, а затем в коде вам просто нужно написать:

String cmd = System.getProperty("your.command.path", "/some/default/fallback/path/cmd");

Таким образом, вы не будете полагаться на запуск в каком-либо контейнере Java EE/servlet.

Ответ 4

Это решение из двух частей.

  • Сначала мы можем создать файл свойств, доступный для веб-приложения. Это не должно быть вашими стандартными свойствами сообщения, а вторичным файлом.
  • Во-вторых, ваше развертывание script и ваша сборка script могут выполнять дополнительную работу по созданию контекстных каталогов на сервере приложений, где она может скопировать файл свойств из сборки и сделать его доступным для инструментов командной строки.

Apache CLI - очень хорошая альтернатива для доступа к программному обеспечению.