Как включить значения из файла.properties в web.xml?
Мне нужно включить некоторые значения из file.properties
в WEB-INF/web.xml
что-то вроде этого:
<param-name>uploadDirectory</param-name>
<param-value>myFile.properties['keyForTheValue']</param-value>
В настоящее время я работаю с этим:
- JBoss
- JEE5
3 ответа
Вы можете добавить этот класс, который добавляет все свойства из вашего файла в JVM. И добавить этот класс как слушатель контекста web.xml
public class InitVariables implements ServletContextListener
{
@Override
public void contextDestroyed(final ServletContextEvent event)
{
}
@Override
public void contextInitialized(final ServletContextEvent event)
{
final String props = "/file.properties";
final Properties propsFromFile = new Properties();
try
{
propsFromFile.load(getClass().getResourceAsStream(props));
}
catch (final IOException e)
{
// can't get resource
}
for (String prop : propsFromFile.stringPropertyNames())
{
if (System.getProperty(prop) == null)
{
System.setProperty(prop, propsFromFile.getProperty(prop));
}
}
}
}
в web.xml
<listener>
<listener-class>
com.company.InitVariables
</listener-class>
</listener>
теперь вы можете получить все свойства в вашем проекте, используя
System.getProperty(...)
или в web.xml
<param-name>param-name</param-name>
<param-value>${param-name}</param-value>
Слово предостережения относительно принятого решения выше.
Я экспериментировал с этим на jboss 5 сегодня: contextInitialized()
метод не вызывается до web.xml
загружен, поэтому изменение свойств системы не вступает в силу со временем. Как ни странно, это означает, что если вы повторно развернете веб-приложение (без перезапуска jboss), свойство останется в живых после того, как будет установлено в последний раз, когда оно было развернуто, поэтому оно может работать.
Решение, которое мы собираемся использовать вместо этого, заключается в передаче параметров в jboss через командную строку java, например -Dparameter1=value1 -Dparameter2=value2
,
Используйте задание на замену Ant. https://blogs.oracle.com/rajeshthekkadath/entry/automation_using_ant_replace_function