Nano Hash - криптовалюты, майнинг, программирование

Использование свойств в web.xml

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

Можно ли использовать свойство из файла свойств в пути к классам в web.xml? Что-то вроде этого:

 <context-param>
  <param-name>myparam</param-name>
  <param-value>classpath:mypropertyfile.properties['myproperty']</param-value>
 </context-param>

С наилучшими пожеланиями

P



Ответы:


1

Нет. Однако вы можете передать файл свойств и прочитать его во время выполнения.

<context-param>
    <param-name>propfile</param-name>
    <param-value>myprop.properties</param-value>
</context-param>

Затем тривиально загрузить свойство во время выполнения, если у вас есть доступ к сервлету.

Properties properties = new Properties();
GenericServlet theServlet = ...;
String propertyFileName = theServlet.getInitParameter("propfile");
properties.load(getClass().getClassLoader().getResourceAsStream(propertyFileName));
Object myProperty = properties.get("myProperty");
06.05.2011
  • где должен находиться мой файл myprop.properties в иерархии папок проекта? 25.11.2014
  • Это не тривиально, если вы пытаетесь настроить сторонний компонент, дизайн которого вы не контролируете. 31.08.2017

  • 2

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

    При использовании maven вы можете определить разные профили для своих сред и установить параметр, который вы хотите изменить в каждом профиле.

    В вашем pom.xml

    <profile>
        <id>env1</id>
        <properties>
            <my.param>myParamValue<my.param/>
        </properties>
    </profile>
    
    <profile>
        <id>env2</id>
        <properties>
            <my.param>myParamValue2<my.param/>
        </properties>
    </profile>
    

    В вашем web.xml

    <context-param>
        <param-name>myparam</param-name>
        <param-value>${my.param}</param-value>
    </context-param>
    

    И настройте фильтрацию в дескрипторе развертывания в плагине maven war.

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
            <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors>
        </configuration>
    </plugin>
    
    21.06.2017

    3

    AFAIK context-param и env-entry оба содержат статические значения. Вы не получите значение среды выполнения (динамическое) из файла свойств. Это будет так:

    <context-param>     
      <param-name>myparam</param-name>     
      <param-value>myactualpropertyvalue</param-value>     
     </context-param>
    

    Любое изменение значения требует повторного развертывания веб-приложения.

    В вашем примере значение, которое вы извлекаете, будет String classpath:mypropertyfile.properties['myproperty']

    Если вы используете Glassfish, вы можете обновить его на лету из командной строки http://javahowto.blogspot.com/2010/04/glassfish-set-web-env-entry.html

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

    Вы можете заменить значения в web.xml как часть процесса сборки ant/maven.

    02.06.2010
  • Спасибо за ваш ответ. Однако именно во время запуска я хотел бы искать свойство. т.е. одна и та же война должна иметь разные свойства для разных окружений. Я не уверен, что это вообще возможно сделать. На данный момент я делаю почти так, как вы предлагаете, я заменяю значение во время сборки Maven. 03.06.2010
  • Это информативно... java.sun.com/developer/technicalArticles/xml/WebAppDev4 23.03.2012
  • как бы вы назвали этот контекст в своем Java-коде? и куда вас указывает «classpath»? 08.09.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..