2013-09-24 3 views
0

Я разрабатываю образец мультимодульного проекта maven, который использует MyBatis. Единственные зависимости, которые у меня есть, - это мои собственные модули и mybatis.
На мой сохранение слоя, я создал следующие на pom.xml:Внутри mybatis-config.xml можно читать свойства из pom.xml в проекте Maven?

<properties> 

    <!-- JDBC --> 
     <jdbc.url>jdbc:postgresql://localhost:5432/kpi?autoReconnect=true</jdbc.url> 
     <jdbc.driverClassName>org.postgresql.Driver</jdbc.driverClassName> 
     <jdbc.username>postgres</jdbc.username> 
     <jdbc.password>postgres</jdbc.password> 
     <jdbc.initConnections>15</jdbc.initConnections> 
     <jdbc.maxActive>40</jdbc.maxActive> 
     <jdbc.maxIdle>5</jdbc.maxIdle> 

</properties> 


Затем в mybatis-config.xml внутри src/main/resources, я сделал следующее:

<environments default='development'> 
    <environment id='development'> 
     <transactionManager type='JDBC'/> 
     <dataSource type='POOLED'> 
      <property name='driver' value="${jdbc.driverClassName}"/> 
      <property name='url' value="${jdbc.url}"/> 
      <property name='username' value="${jdbc.username}"/> 
      <property name='password' value="${jdbc.password}"/> 
     </dataSource> 
    </environment> 


В конце концов, когда я пытаюсь запустить приложение, и др следующее сообщение об ошибке:

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database. Cause: java.sql.SQLException: Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Cannot find class: ${jdbc.driverClassName} 


Но, когда я изменить код выше, явно вводить информацию с помощью JDBC, она работает:

<environments default='development'> 
    <environment id='development'> 
     <transactionManager type='JDBC'/> 
     <dataSource type='POOLED'> 
      <property name='driver' value="org.postgresql.Driver"/> 
      <property name='url' value="jdbc:postgresql://localhost:5432/kpi?autoReconnect=true"/> 
      <property name='username' value="postgres"/> 
      <property name='password' value="postgres"/> 
     </dataSource> 
    </environment> 
</environments> 


Итак, что можно сделать это работает, используя информацию, которую я вложил в мой pom.xml? Я пробовал использовать тег <properties resource='pom.xml'/>, но безуспешно.

Заранее спасибо.

ответ

3

Во-первых, технически вы не можете читать свойства в POM при запуске MyBatis, поскольку POM - это что-то, что используется в компиляции, и когда MyBatis запущен, это уже среда выполнения, которая уже прошла компиляцию. Поэтому просто не разумно читать данные с POM (если ваша конфигурация MyBatis не является частью автоматического тестирования в вашем процессе сборки, но, похоже, это не так)

Вы можете добиться аналогичного эффекта с помощью механизма фильтрации ресурсов Maven , для которых заполнители в вашем mybatis-config.xml заменяются свойствами, определенными в Maven во время процесса сборки.

http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

Вы можете иметь некоторые настройки в вашем POM, которые остановить фильтрацию на каталоге ресурсов вызвавшего проблему. Проверьте правильность замены свойств в JAR/WAR после того, как вы создали свое приложение.

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

+0

Hello @Adrian Shum! Я приму ваше предложение, мне больше не нужно 'pom.xml' для этого. Я собираюсь предоставить конфигурационный файл для конфигурации базы данных. Большое спасибо. –

0

На каком задании maven вам понравится pom.xml для чтения?

В момент, когда вы выполняете компиляцию mvn? mvn пакет? или иным образом?

+0

Здравствуйте, @mallim! Я уже решил проблему обновления моего дизайна. 'pom.xml' больше не нужен для этого =) Спасибо в любом случае. –

Смежные вопросы