【问题标题】:in java webapp,hsqldb url won't accept relative path. is it due to maven configuration?在 java webapp 中,hsqldb url 不接受相对路径。是因为maven配置吗?
【发布时间】:2011-08-25 07:59:25
【问题描述】:

我正在开发一个由其他 2 个 maven 模块组成的 webapp。

我有代表数据库层的模型模块。它在test/resources/META-INF 中有用于测试的spring 应用程序上下文test-model-config.xml,在test/resources' default package 中有属性文件。和resources/META-INF 中的model-config.xml,这是实时上下文,应该从webapp 中选择属性。 到目前为止构建良好,工作正常没问题

-    <!-- 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>

这里只是测试/资源中属性的一个 sn-p

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

还有另一个模块服务具有相同类型的配置文件,其中有一个测试配置和一个实时配置文件。这个单独也没有问题。构建正常,工作正常。

现在 webapp 中有 webapp-config.xml/web pages/WEB-INFgeneral.properties 中,用于模型和服务模块所需的所有属性。所以general.propertieswebapp-log4j.properties在webapp的resources' default package中。这里是webapp-config.xml的sn-p

   <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
// ....

它也可以很好地构建并在出现问题时正常运行。

1 :日志说:

java.sql.SQLException: 文件输入/输出错误 classpath:target/mynewdb.properties java.io.FileNotFoundException: classpath:target/mynewdb.properties.new (没有这样的文件或目录) 完整的调试输出是here

我真的很惊讶,因为这是我第一次遇到这种错误。它运行良好,绝对 url 为/media/Repo/myproject/mydb;create=true,但想法是将它放在 webapp 目标中,以便它删除目标文件夹时被删除。

我不知道,现在已经 2 天了。 id 如何解决这个问题?这里有什么我没有看到/做的事情吗?是因为maven配置吗? 我的 pom 是可见的 here 感谢您阅读本文。

【问题讨论】:

    标签: spring maven jakarta-ee web-applications hsqldb


    【解决方案1】:

    我认为general.propertiesjdbc.url 的语法不正确——您不能为file 指定classpath 位置——它必须是绝对路径或相对路径。参考jdbcConnectionjavadoc

    【讨论】:

    • 我删除了类路径关键字。它在那里是因为我用于模型模块的那个工作得很好。即使我删除了类路径,jdbc.url=jdbc:hsqldb:file:mynewdb;create=truejdbc.url=jdbc:hsqldb:file:/mynewdb;create=truejdbc.url=jdbc:hsqldb:file:/target/mynewdb;create=truejdbc.url=jdbc:hsqldb:file:target/mynewdb;create=true 都没有工作,但我相信,它遵循连接字符串规则: jdbc:hsqldb:file:[]'(与旧形式的语义相同)
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      我的 HSQLDB 文件数据库正在使用以下 JDBC URL 工作:

      jdbc:hsqldb:res:/db/mydb
      

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

      /WEB-INF/classes/db
      

      【讨论】:

      • 正如 Yves Martin 指出的那样,此解决方案有效,但会将数据库限制为只读访问。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多