Как установить параметр для веб-приложения 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 - очень хорошая альтернатива для доступа к программному обеспечению.