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

Я разрабатываю веб-приложение, созданное с 2 другими модулями Maven.

у меня есть модуль модели, который представляет базу данных layer.it имеет контекст приложения весны 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>

вот только фрагмент свойств в тесте / ресурсах

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? мой pom можно посмотреть здесь, спасибо за чтение.

3 ответа

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

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

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

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

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

jdbc:hsqldb:res:/db/mydb

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

/WEB-INF/classes/db
Другие вопросы по тегам