в веб-приложении Java URL-адрес hsqldb не будет принимать относительный путь. это из-за конфигурации maven? - PullRequest
4 голосов
/ 14 мая 2011

Я занимаюсь разработкой веб-приложения с двумя другими модулями maven.

У меня есть модуль модели, который представляет базу данных layer.it имеет контекст приложения Spring test-model-config.xml в test/resources/META-INF для тестирования и файлы свойств в test/resources' default package. и model-config.xml в resources/META-INF, который является живым контекстом и который должен выбирать свойства из веб-приложения. до сих пор прекрасно строит, отлично работает без проблем

-    <!-- test-model-config.xml and model-config.xml have the same thing-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}"  />
</bean>

Вот только фрагмент свойств в test / resources

jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.username=sa
jdbc.password=
jdbc.url=jdbc:hsqldb:file:target/mydb;create=true

есть еще один модуль сервисов, который имеет тот же тип conf, где есть тестовая конфигурация и живые конфигурационные файлы. У этого тоже отдельно нет проблем. Строит нормально, работает нормально.

теперь в веб-приложении есть webapp-config.xml в /web pages/WEB-INF и general.properties для всех свойств, необходимых для модели и сервисных модулей. поэтому general.properties и webapp-log4j.properties находятся в resources' default package веб-приложения. Здесь фрагмент webapp-config.xml

   <import resource="classpath:META-INF/model-config.xml" />
   <import resource="classpath:META-INF/service-config.xml" />
   <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
     <property name="locations">
        <list>
            <value>classpath:general.properties</value>
            <value>classpath:webapp-log4j.properties</value>
        </list>
     </property>
   </bean>

в общем. Свойства у нас

jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.username=sa
jdbc.password=
jdbc.url=jdbc:hsqldb:file:classpath:target/mynewdb;create=true
// ....

Он также хорошо работает и работает с проблемой.

1 : в журнале написано:

java.sql.SQLException: Ошибка ввода / вывода файла classpath: target / mynewdb.properties java.io.FileNotFoundException: classpath: target / mynewdb.properties.new (нет такого файла или каталога), полный вывод отладочной информации равен здесь

Я действительно удивлен, потому что это первый раз, когда я сталкиваюсь с такого рода ошибками. Он работает нормально с абсолютным URL-адресом, таким как /media/Repo/myproject/mydb;create=true, но идея в том, чтобы он был в цели webapp, чтобы он удаляется при удалении целевой папки.

ну, я понятия не имею, и прошло уже 2 дня. Как id может это исправить? здесь что-то, чего я не вижу / не делаю? это из-за конфигурации maven? мой пом для просмотра здесь спасибо, что прочитали это.

Ответы [ 3 ]

2 голосов
/ 14 мая 2011

Я считаю, что синтаксис jdbc.url в general.properties неправильный - вы не можете указать classpath местоположение для file - это должен быть абсолютный или относительный путь.Обратитесь к jdbcConnection javadoc

1 голос
/ 25 мая 2011

Путь к файлу базы данных относительно текущего рабочего каталога вашей JVM.

В случае, если вы запускаете JVM из плагина Maven Sunfire (например), вы должны установить свойство workingDirectory (или соответствующую опцию любого другого плагина).

Вы можете использовать режим res: вместо file:, чтобы получить базу данных из classpath, но она ограничена доступом только для чтения.

0 голосов
/ 05 декабря 2011

Моя файловая база данных HSQLDB работает с использованием следующего URL JDBC:

jdbc:hsqldb:res:/db/mydb

Где mydb - имя файла HSQLDB, которое находится в следующем каталоге:

/WEB-INF/classes/db
...