簡體   English   中英

Web 應用程序中 hsqldb 文件的相對路徑不起作用?

[英]Relative path to hsqldb files in a web app doesn't work?

我將 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 工作目錄嗎? 任何幫助表示贊賞。

似乎 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

希望這對可能遇到同樣問題的人有所幫助。

HSQLDB 2.2.8 及更高版本允許在連接 URL 中使用變量。 該變量可以是任何系統屬性,例如 Web 應用程序目錄路徑。

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

請參閱“連接 URL 中的變量”部分

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

例子

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

感謝 fredt 的回答,在 Tomcat 8 上解決了這個問題。

url = "jdbc:hsqldb:file:" + mydbpath;

其中 mydbpath 是具有指定數據庫的實際路徑的變量。 這不知何故有效

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM