Чтение свойств от tomcat

Какова наилучшая практика для чтения конфигурационных файлов для вашего приложения. Какие папки в tomcat-сервере "находятся на пути к классам".

Я попытался разместить мой файл конфигурации в TOMCAT_HOME\conf, но все же я не могу его прочитать из своего сервлета.

Пробовал использовать это (есть файл app.properties в conf):

this.getClass().getClassLoader().getResourceAsStream("/app.properties");

У меня не так много свойств, возможно, 10-15. Я полагал, что это не проблема. Я помню, когда я использовал jboss, это не было проблемой, как это много.

В моем приложении я также указываю соединение с DB spring в context.xml, могу ли я указать мои свойства там как-то? Или как это работает с tomcat?

Я хотел бы сохранить свои свойства отдельно от моей войны/распакованной войны.

Обновление

Причина для этого объясняется тем, что я не знаю, где будет развернуто мое приложение (в каком месте)

Ответ 1

Существует много разных способов, но это зависит от ваших потребностей:

Чтобы загрузить файл свойств из каталога $TOMCAT_HOME/conf, вам необходимо получить к нему доступ с помощью объекта java.io.File, так как загрузчик классов (как в this.getClass().getClassLoader().getResourceAsStream(...) может просто загружать файлы (и классы) из вашего пути к классу ( под WEB-INF/classes, WEB-INF/lib или $TOMCAT_HOME/lib).

Самый простой пример загрузки файла из каталога конфигурации Tomcat:

File configDir = new File(System.getProperty("catalina.base"), "conf");
File configFile = new File(configDir, "myconfig.properties");
InputStream stream = new FileInputStream(configFile);
Properties props = new Properties();
props.load(stream);

Обратите внимание, что этот подход сделает ваш код зависимым от Tomcat (механизм загрузки зависит от того, доступен ли системный объект Tomcat). Это то, что я бы не рекомендовал вообще, поэтому, если вы переместите свой файл свойств в папку внутри вашего пути к классам, тогда вы сможете загрузить его так, как вы пытались и ваше приложение может быть развернуто в любом контейнере.

И вы можете настроить свои свойства как ресурсы JNDI, но для их доступа было бы слишком много хлопот.

Ответ 2

Поместите свои файлы в свой webapp WEB-INF/classes. Это каталог классов по умолчанию. conf, если только для внутренних компонентов Tomcat.

Ответ 3

Вместо того, чтобы ссылаться на местоположение конкретного файла конфигурации, я бы использовал конфигурацию, связанную с JNDI, чтобы поддерживать приложения в зависимости от данных конфигурации и стандартов Java EE. Я вижу два варианта:

  • Если у вас есть только небольшое количество записей конфигурации в вашем файле свойств, подумайте о том, чтобы сделать Записи среды и получить к ним доступ через JNDI в ваших приложениях.

  • В качестве альтернативы скажите, что если вы хотите сохранить свои свойства в отдельном файле свойств, вы также можете создать bean для представления свойств, factory (инициализация bean с использованием файла свойств ) и подключите его к JNDI как Определение ресурсов.
    Благодаря этому можно даже регулярно перечитывать файл свойств без необходимости перезапуска приложений, переключения между различными источниками конфигурации или аналогичными другими требованиями.

Каждое из веб-приложений, использующих эту конфигурацию, должно будет включить ссылку на ресурсы в ней web.xml для ссылки на конфигурацию bean ( или ссылку на каждую запись env., если используется вариант 1).

Ответ 4

Насколько я знаю, вы можете настроить datasource в tomcat. DataSource в Tomcat

После этого вы можете использовать datasource в своем приложении.

Ответ 5

Хотя это может быть PITA, возможно, это также функция, которая не знает, где она будет развернута. Вы не можете "параться" с этим фактом!

В зависимости от остальной части вашего Java-пакета лучший способ обычно не зависит от Tomcat. Если вы используете Spring, вы можете сказать, например:

new ClassPathResource("**/myFile.properties")

или при использовании Java Config, еще один пример:

@PropertySource("classpath:META-INF/MyWeb.properties")

В простой Java вы можете сказать:

InputStream stream = loader.getResourceAsStream(resourceName);

где loader - это экземпляр класса ClassLoader

Ответ 6

добавить файл .properties в папку apache-tomcat-7.0.78\conf:

File configDir = new File(System.getProperty("catalina.base"), "conf");
File configFile = new File(configDir, "dashboardiframes.properties");
InputStream stream = new FileInputStream(configFile);Properties properties = new Properties();
properties.load(stream);