2015-06-02 5 views
21

Wir entwickeln eine Play 2.4-Anwendung (Java API).Wie wird ein Pfad relativ zum Projektstamm zur H2 db-Dateikonfiguration mit Play Framework 2.4 verwendet?

Für Dev-Zwecke möchten wir eine persistente H2-Datenbank mit DB-Dateipfad relativ zum Projektstammverzeichnis verwenden.

In How to use a persistent H2 database in the Play Framework instead of in-memory gab es Lösung für Play 2.0:

db.default.url="jdbc:h2:file:data/db" 

jedoch mit Play 2.4 dies nicht zu funktionieren scheint, aber ich bekomme Fehlermeldung mit folgenden Ausnahme an der Unterseite:

Caused by: org.h2.jdbc.JdbcSQLException: A file path that is implicitly 
relative to the current working directory is not allowed in the database 
URL "jdbc:h2:file:data/db". Use an absolute path, ~/name, ./name, or the 
baseDir setting instead. [90011-187] 
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) 
    at org.h2.message.DbException.get(DbException.java:179) 
    ... 

Ich könnte Verbindung mit einem absoluten Pfad und mit einem Pfad relativ zum Home-Verzeichnis wie folgt erhalten:

db.default.url="jdbc:h2:file:/Users/foo/data/db" 

oder

db.default.url="jdbc:h2:~/data/db" 

Allerdings ist es eine Möglichkeit, um den Projekt-Stammordner zu beziehen?

+2

Wie wäre es mit 'db.default.url =" jdbc: h2: ./ data/db "'? – Roman

+0

@Roman Scheint zu arbeiten, danke. Ich weiß nicht, ob das fragil sein könnte, wenn der Prozess von einem anderen Verzeichnis aus gestartet würde. Aber für unsere Entwicklung ist dies kein Problem. Möchten Sie das als Antwort hinzufügen? – Touko

Antwort

30

Ok, habe ich ein wenig Forschung und fand diese im Changelog (http://www.h2database.com/html/changelog.html):

Implizite relative Pfade deaktiviert sind (Systemeigenschaft "h2.implicitRelativePath"), so dass die Datenbank-URL jdbc: h2 : Test muss jetzt als jdbc: h2: ./ test geschrieben werden.

In H2 ab Version 1.4.177 Beta sind implizite relative Pfade nicht mehr erlaubt. Daher sollte die URL in Ihrem Fall mit einem expliziten relativen Pfad geschrieben werden: db.default.url="jdbc:h2:./data/db".

-3

In Ihrem Fall denke ich,

db.default.url = "jdbc: h2: ~/data/db"

zu Ressource Ordner Ihres Projekts beziehen.

+3

Das ist nicht korrekt. '~/data/db' bezieht sich auf' /data/db'. – javaj

Verwandte Themen