2

Spring ベースの Java Web アプリケーションに hsqldb を使用しています。データベース ファイル (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

4 に答える 4

5

Tomcatは、アプリケーションコンテキストを参照するためのプロパティ変数(「webroot」など)を提供していないようです。したがって、私の解決策は、そのようなプロパティをサーブレットコンテキストリスナーに登録することです。

私のコード:

 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

これが同じ問題に遭遇する可能性のある人に役立つことを願っています。

于 2012-07-03T04:36:27.043 に答える
1

fredt's answerのおかげで、Tomcat 8でそれを理解しました。

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

mydbpath は、指定されたデータベースへの実際のパスを持つ変数です。これは何とか動作します

于 2017-04-05T08:24:59.747 に答える
1

セクション「接続 URL の変数」を参照してください。

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

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

于 2012-07-02T08:19:38.010 に答える
1

HSQLDB 2.2.8 以降では、接続 URL で変数を使用できます。変数は、Web アプリケーションのディレクトリ パスなど、任意のシステム プロパティにすることができます。

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

于 2012-07-02T07:32:41.760 に答える