Web应用程序中hsqldb文件的相对路径不起作用?

时间:2012-07-02 07:16:45

标签: java spring tomcat hsqldb

我正在使用hsqldb作为基于Spring的java webapp。我将数据库文件(mydb.lck,mydb.properties,..)放在src \ main \ java \ data文件夹中,以便它们发布到WEB-INF \ classes \ data。

在数据源配置中,我指定了JVM工作目录的相对路径。按照hsqldb文档中的指导。

portal.jdbc.url=jdbc:hsqldb:file:/data/mydb(这个分隔符适用于Windows吗?)

但是Spring似乎没有找到这条道路而且坚持要求

java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: CUSTOMER org.hsqldb.jdbc.Util.sqlException(Unknown Source)

但是,如果我指定一个绝对路径,它可以完美地运行

portal.jdbc.url=jdbc:hsqldb:file:d:\\TomcatServer\\apache-tomcat-7.0.10\\wtpwebapps\\myportal-app\\data\\mydb

我是否应该错过了解Web应用程序上的JVM工作目录? 任何帮助表示赞赏。

4 个答案:

答案 0 :(得分:5)

似乎Tomcat没有为我们提供一个属性变量(比如“webroot”)来引用我的应用程序上下文。所以我的解决方案是在Servlet上下文监听器中注册这样的属性。

我的代码:

 public class WebAppPropertiesListener implements ServletContextListener{
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        String rootPath = sce.getServletContext().getRealPath("/");
        System.setProperty("webroot", rootPath);

    }
    ...
 }

在触发Spring上下文之前在web.xml中添加侦听器

<listener>
    <listener-class>com.iportal.util.WebAppPropertiesListener</listener-class>
</listener>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

然后我把属性放在Hsqldb设置中。

portal.jdbc.url=jdbc:hsqldb:file:${webroot}WEB-INF/classes/data/mydb

希望这对可能遇到同样问题的人有所帮助。

答案 1 :(得分:1)

HSQLDB 2.2.8及更高版本允许连接URL中的变量。该变量可以是任何系统属性,例如Web应用程序目录路径。

http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html#dpc_variables_url

答案 2 :(得分:1)

请参阅“连接URL中的变量”部分

http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html

实施例

JDBC:HSQLDB:文件:$ {mydbpath}; sql.enforce_types =真

答案 3 :(得分:0)

感谢fredt

在Tomcat 8上找到它

url =“jdbc:hsqldb:file:”+ mydbpath;

其中mydbpath是一个变量,具有指定数据库的实际路径。 这在某种程度上有效