Play 2.4アプリケーション(Java API)を開発しています。
開発目的のために、プロジェクトのルートディレクトリに相対的なDBファイルパスで永続的なH2データベースを使用したいと思います。
メモリ内の代わりにPlayフレームワークで永続的なH2データベースを使用する方法 Play 2.0の解決策がありました:
db.default.url="jdbc:h2:file:data/db"
ただし、Play 2.4ではこれは機能していないようですが、下部に次の例外を含むエラーメッセージが表示されます。
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)
...
次のように、絶対パスおよびホームディレクトリからの相対パスで動作するように接続を取得できます。
db.default.url="jdbc:h2:file:/Users/foo/data/db"
または
db.default.url="jdbc:h2:~/data/db"
しかし、プロジェクトのルートフォルダを参照する方法はありますか?
わかりました、私は少し調査をし、changelog( http://www.h2database.com/html/changelog.html )でこれを見つけました:
暗黙的な相対パスが無効になっているため(システムプロパティ "h2.implicitRelativePath")、データベースURL jdbc:h2:testをjdbc:h2:./ testとして記述する必要があります。
バージョン1.4.177 Beta以降のH2では、暗黙的な相対パスは許可されなくなりました。したがって、あなたの場合、明示的な相対パスでURLを記述する必要があります:db.default.url="jdbc:h2:./data/db"
。
固定パスまたは相対パスを使用できます。 URL jdbc:h2:file:./ data/sampleを使用する場合 http://www.h2database.com/html/faq.html
相対パスを使用できるようになりました。
例えば、 jdbc:h2:file:./../../h2db;