,hsqldb url不会接受相对路径。是由于maven配置?
我正在开发一个由2个其他的maven模块组成的webapp。,hsqldb url不会接受相对路径。是由于maven配置?
我有代表数据库层的模型模块。它有弹出应用程序上下文test-model-config.xml
test/resources/META-INF
进行测试和属性文件test/resources' default package
。和model-config.xml
在resources/META-INF
这是活的上下文,它应该从web应用程序中选择属性。 到现在建立精细,做工精细没有问题
- <!-- 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其中的另一个模块服务有一个测试配置和一个活的配置files.this一个太分开没有问题.builds罚款,工作正常。
现在web应用程序有webapp-config.xml
在/web pages/WEB-INF
和general.properties
为模型和服务模块所需的所有属性。所以general.properties
和webapp-log4j.properties
都在webapp.here的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>
片段在general.properties我们
jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.username=sa
jdbc.password=
jdbc.url=jdbc:hsqldb:file:classpath:target/mynewdb;create=true
// ....
还建立精细和运行罚款的问题。
:日志说:
java.sql.SQLException中:文件输入/输出错误的类路径:目标/ mynewdb.properties java.io.FileNotFoundException:类路径:目标/ mynewdb.properties。新的(没有这样的文件或目录)完整的调试输出here
我真的很惊讶,因为这是我第一次面对这种error.it的运行良好,具有绝对的URL为/media/Repo/myproject/mydb;create=true
,但这个想法是让它在webapp目标中以便在目标文件夹被删除时被删除。
嗯,我没有线索,现在已经2天了。 id如何解决这个问题?在这里,我不是在做什么?是由于maven配置? 我的pom可以看到here 感谢您阅读本文。
我认为general.properties
中的jdbc.url
的语法不正确 - 您无法指定classpath
的位置file
- 它必须是绝对路径或相对路径。请参阅jdbcConnection javadoc
数据库文件路径相对于JVM的当前工作目录。
如果您从Maven sunfire插件(例如)运行JVM,则必须设置属性workingDirectory
(或任何其他插件的相应选项)。
您可以使用res:
模式而不是file:
从classpath中获取数据库,但它仅限于只读访问。
我的HSQLDB文件数据库是通过以下JDBC URL工作:
jdbc:hsqldb:res:/db/mydb
其中mydb的是HSQLDB文件的名称,并位于以下目录:
/WEB-INF/classes/db
正如伊夫马丁指出的,这种解决方案的工作原理,但会将数据库限制为只读访问。 – 2013-07-15 13:17:41
我删除了classpath关键字。它在那里,因为我使用模型模块工作得很好。即使我删除了classpath既不'jdbc.url = jdbc:hsqldb:file:mynewdb; create = true'也不''jdbc.url = jdbc:hsqldb:file :/ mynewdb; create = true'也不是'jdbc.url = jdbc:hsqldb:file:/ target/mynewdb; create = true'也不是'jdbc.url = jdbc:hsqldb:file:target/mynewdb; create = true'工作,但我相信,它遵循连接字符串规则: jdbc:hsqldb:file: []'(与传统表单相同的语义) –
2011-05-14 11:23:21