Java web应用程序中hsqldb文件的相对路径不为';不行?

Java web应用程序中hsqldb文件的相对路径不为';不行?,java,spring,tomcat,hsqldb,Java,Spring,Tomcat,Hsqldb,我正在为基于Spring的java webapp使用hsqldb。我将数据库文件(mydb.lck、mydb.properties,…)放在src\main\java\data文件夹中,以便将它们发布到WEB-INF\classes\data中 在数据源配置中,我指定了JVM工作目录的这个相对路径。按照hsqldb文档中的指导 portal.jdbc.url=jdbc:hsqldb:file:/data/mydb(这个分隔符适用于Windows吗?) 但春天似乎找不到这条路,坚持要走下去 jav

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

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

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

但春天似乎找不到这条路,坚持要走下去

java.sql.SQLSyntaxErrorException:用户缺少权限或找不到对象:客户
org.hsqldb.jdbc.Util.sqlException(未知源)

然而,如果我指定了一个绝对路径,它将完美地工作

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

我是否应该错过对web应用程序上JVM工作目录的理解?
非常感谢您的帮助。

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

请参阅“连接URL中的变量”一节

范例


jdbc:hsqldb:file:${mydbpath};sql.enforce_types=true

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>

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

多亏了fredt的帮助,才在Tomcat8上解决了这个问题

其中mydbpath是一个变量,指定了数据库的实际路径。
这不知怎么起作用了

谢谢你的帮助。但是我没有找到web应用程序目录路径的属性占位符。弗雷德,请你指出一下好吗?看这张关于Tomcat的谢谢。我通读了一遍,但不知道如何设置变量mydbpath。您有什么提示吗?请定义环境变量“user.home”,并尝试将连接路径中的第一种类型的变量用法设置为“如果文件的数据库部分:数据库以~/或~\开头,则将波浪号字符替换为系统属性“user.home”的值导致在此目录或其子目录之一中创建或访问数据库。在下面的示例中,mydb的数据库文件位于用户的主目录中。jdbc:hsqldb:file:~/mydb;关机=真”
portal.jdbc.url=jdbc:hsqldb:file:${webroot}WEB-INF/classes/data/mydb
url = "jdbc:hsqldb:file:" + mydbpath;