После развертывания JDBC. Свойства за пределами .Jar больше не найдены Spring - PullRequest
0 голосов
/ 28 января 2011

В последнее время возникло требование перенести настройки базы данных из Spring applicationContext.xml.Поэтому мы хотели, чтобы файл jdbc.properties находился вне встроенных jar-файлов, чтобы пользователь мог легко изменить jdbc.settings.До сих пор все работало нормально в рабочей области eclipse, но как только я собрал дистрибутив с помощью ant, applicationContext.xml больше не находит jdbc.properties.

applicationContext.xml выглядит следующим образом:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations">
    <value>classpath:jdbc.properties</value>
  </property>
</bean>

<bean id="dataSource"  class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
  <property name="driverClassName" value="${jdbc.driver}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.user}"/>
  <property name="password" value="${jdbc.password}"/>
</bean>

В eclipse я использовал следующий путь к классу, поэтому файл jdbc.properties (который находится в папке проекта eclipse "config") будет найден:

файл пути к классам:

<classpath>
        ...
 <classpathentry kind="src" path="config"/>
        ...
</classpath>

Пока здесь все отлично работает.Сейчас я строю проект с помощью Ant.Будет создан файл project.jar, и рядом с ним будет отдельная папка конфигурации с файлом jdbc.properties.В Manifest.mf есть запись:

config/jdbc.properties

Но когда я сейчас запускаю сервер, свойства jdbc.properties не найдены.Я заметил, что когда я изменяю запись Manifest.mf на:

config/.

, она снова работает нормально.Но я не понимаю, почему это не так.Может кто-нибудь объяснить мне это поведение?Или может даже знает, что я делаю не так?Очевидно, мне нужно как-то изменить файл Ant, поэтому он просто добавляет папку config в файл манифеста, а не только сам файл jdbc.properties?

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

Ответы [ 2 ]

1 голос
/ 28 января 2011

В classpath хранятся файлы JAR и каталоги, содержащие файлы классов и другие ресурсы. Вы должны указать в вашем classpath путь к каталогу, содержащему файл свойств, а не путь к самому файлу свойств. То есть ваша запись манифеста должна быть 'config'.

0 голосов
/ 31 января 2011

Решением было определение элемента класса в Ant-buildscript.

<classpath>
  <pathelement location="${dir.build}/config/."/>
<classpath>

К сожалению, я до сих пор не знаю, почему обращение к файлу не решило и эту проблему.

...