Хобрук: Ваш путь к мастерству в программировании

Передача свойств maven в spring

Я знаю, что это, вероятно, глупый вопрос, но я не могу понять его для жизни. В основном я использую maven для установки имени пользователя, пароля и имени класса драйвера dataSource. Когда я смотрю в эффективный Pom.xml, все выглядит нормально следующим образом

<dataSource.driverClassName>oracle.jdbc.driver.OracleDriver</dataSource.driverClassName>
<dataSource.username>someUsername</dataSource.username>
<dataSource.password>somePassword</dataSource.password>

Я пытаюсь использовать эту информацию при объявлении источника данных Spring. Код выглядит следующим образом.

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${dataSource.driverClassName}"/>
    <property name="url" value="${dataSource.url}"/>
    <property name="username" value="${dataSource.username}"/>
    <property name="password" value="${dataSource.password}"/>
</bean>

Затем я передаю источник данных в jdbcTemplate, но когда я использую шаблон для запуска операторов sql в своем коде, я получаю сообщение об ошибке, говорящее о том, что драйвер с именем ${dataSource.driverClassName} не найден. Очевидно, это связано с тем, что передается строковая константа, а не переменная. Что мне не хватает?

Спасибо

15.02.2012

  • Спасибо за помощь. Похоже, я искал PropertyConfigurationPlaceholder. 16.02.2012

Ответы:


1

Spring ожидает найти эти значения в файле .properties.

Вставьте PropertyConfigurationPlaceholder с этими значениями, и Spring их найдет.

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html

См. пример 3.8.2.1 ниже:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html

15.02.2012

2

Обзор

Простой способ настроить подключаемый модуль Maven Resources без добавления классов Java — определить фильтр ресурсов. В качестве примера мы настроим spring-config.xml, используя свойства, определенные в pom.xml.

пом.xml

Файл pom.xml определяет свойство следующим образом:

<project>
  <properties>
    <environment.deploy>local</environment.deploy>
  </properties>
  ...

Затем в секции build укажите расположение ресурсов (файлов), в которых будут заменены переменные. В следующем примере будет обновлен только файл spring-config.xml:

  <build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>spring-config.xml</include>
            </includes>
        </resource>
    </resources>
  </build>
</project>

Синтаксис pom.xml удобен и может использоваться для замены значений в нескольких файлах, например:

<resources>
  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
    <includes>
      <include>**/*included_filename.xml</include>
    </includes>
  </resource>
</resources>

Также возможны исключения:

<excludes>**/*excluded_filename.xml</excludes>

Если только к одному файлу нужно применить переменные, настройте разные resource, например:

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>spring-config.xml</include>
        </includes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
        <includes>
            <include>**/*</include>
        </includes>
    </resource>
</resources>

Это гарантирует, что все файлы объединены, но изменены только spring-config.xml.

весна-config.xml

Расположенные в src/main/resources относительно корневого каталога проекта, можно использовать свойства, загруженные Maven. Например:

<beans ...>
  <bean ...>
    <property name="deploymentEnvironment">
        <list>
            <value>${environment.deploy}</value>
        </list>
    </property>
</bean>

В процессе сборки Maven заменяет value выше в целевом файле spring-config.xml:

<beans ...>
  <bean ...>
    <property name="deploymentEnvironment">
        <list>
            <value>local</value>
        </list>
    </property>
</bean>

Внешние свойства

Любители приключений могут загрузить свойства Maven из внешних файлов.

26.08.2013

3

Я думаю, что вы не можете сделать это таким образом, я имею в виду, из pom.xml в контекст приложения spring xml.

Поместите свои свойства в файл свойств, например:

dataSource.username=${dataSource.username}
dataSource.driverClassName=${dataSource.driverClassName}
dataSource.username=${dataSource.username}
dataSource.password=${dataSource.password}

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

15.02.2012

4

Maven не может передавать какие-либо данные приложению, потому что maven работает во время компиляции, а параметр оценивается во время выполнения.

Но вы можете использовать фильтры maven. Чтобы заменить некоторые маркеры значениями, пока maven обрабатывает ресурсы.

15.02.2012
  • Я согласен с этим ответом. Использование фильтрации maven обновляет значения в файлах конфигурации Spring во время сборки, таким образом, имея правильные значения во время выполнения. См. stackoverflow.com /вопросы/3886753/ 10.07.2013
  • Но фильтрация должна быть явно включена в POM, как показано в ответе Carlos AG. 10.04.2018
  • Новые материалы

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

    Обзор 20 основных и современных методов работы с массивами в JavaScript
    Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

    Да, но я чувствую необходимость указать, что это или не единственные два.
    Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.