Передача мавенских свойств весне - PullRequest
12 голосов
/ 16 февраля 2012

Я знаю, что это, вероятно, глупый вопрос, но я не могу понять это для моей жизни.В основном я использую 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} можно найти.Это очевидно потому, что передается строковая константа, а не переменная.Чего мне не хватает?

Спасибо

Ответы [ 4 ]

7 голосов
/ 26 августа 2013

Обзор

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

pom.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 s, например:

<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 можно также загрузить из внешних файлов .

3 голосов
/ 16 февраля 2012

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

Поместите ваши свойства в файл свойств, что-то вроде:

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

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

2 голосов
/ 16 февраля 2012

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

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

2 голосов
/ 16 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...