,hsqldb url不会接受相对路径。是由于maven配置?

问题描述:

我正在开发一个由2个其他的maven模块组成的webapp。,hsqldb url不会接受相对路径。是由于maven配置?

我有代表数据库层的模型模块。它有弹出应用程序上下文test-model-config.xmltest/resources/META-INF进行测试和属性文件test/resources' default package。和model-config.xmlresources/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-INFgeneral.properties为模型和服务模块所需的所有属性。所以general.propertieswebapp-log4j.properties都在webapp.here的resources' default packagewebapp-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

+0

我删除了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

数据库文件路径相对于JVM的当前工作目录。

如果您从Maven sunfire插件(例如)运行JVM,则必须设置属性workingDirectory(或任何其他插件的相应选项)。

您可以使用res:模式而不是file:从classpath中获取数据库,但它仅限于只读访问。

我的HSQLDB文件数据库是通过以下JDBC URL工作:

jdbc:hsqldb:res:/db/mydb 

其中mydb的是HSQLDB文件的名称,并位于以下目录:

/WEB-INF/classes/db 
+0

正如伊夫马丁指出的,这种解决方案的工作原理,但会将数据库限制为只读访问。 – 2013-07-15 13:17:41