Вопрос по java-ee, jboss, web.xml, java-ee-5 – Как включить значения из файла .properties в web.xml?

8

Мне нужно включить некоторые значения изfile.properties вWEB-INF/web.xml что-то вроде этого:

<param-name>uploadDirectory</param-name>
<param-value>myFile.properties['keyForTheValue']</param-value>

Я сейчас работаю с этим:

JBoss JEE5
Возможный дубликатUsing properties in web.xml imgx64

Ваш Ответ

3   ответа
3

Я экспериментировал с этим на jboss 5 сегодня:contextInitialized() Метод не вызывается доweb.xml загружен, поэтому изменение свойств системы не вступает в силу во времени. Как ни странно, это означает, что если вы повторно развернете веб-приложение (без перезапуска jboss), свойство останется в живых после того, как будет установлено в последний раз, когда оно было развернуто, поэтому оно может работать.

Решение, которое мы собираемся использовать вместо этого, состоит в том, чтобы передавать параметры в jboss через командную строку java, например.-Dparameter1=value1 -Dparameter2=value2.

Лучшее решение (хотя и не работает с jboss 7) - это использовать properties.service.xml. Вы можете отобразить свойства на лету там.
Это хорошая мысль (и именно здесь наши системные администраторы предпочитают сохранять системные свойства), но вы заставили это работать? Я попытался обновить properties.services.xml подserver/default/deploy а такжеserver/all/deploy и в любом случае он не вступает в силу в файле web.xml.
13

который добавляет все свойства из вашего файла в 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>
Спасибо, это решение, которое я искал lancha90
Для этого нет никакой полезности?
В java мы сможем получить значение свойства в любом месте приложения, но в xml мы не можем использовать переменную в web.xml.
Я не смог заставить Jetty найти ресурс, используя относительный путь и getResourceAsStream, но абсолютный путь и FileInputStream, кажется, работают ... +1 для того, чтобы направить меня в правильном направлении!

Похожие вопросы