В веб-приложении 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