Touko
Touko

Reputation: 11779

How to use a path relative to project root to H2 db-file configuration with Play Framework 2.4?

We're developing a Play 2.4 application (Java API).

For dev purposes, we'd like to use a persistent H2 database with DB file path relative to the project root directory.

In How to use a persistent H2 database in the Play Framework instead of in-memory there was solution for Play 2.0:

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

However, with Play 2.4 this doesn't seem to work but I get error message with the following exception at the bottom:

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)
    ...

I could get connection to work with an absolute path and with a path relative to the home directory, like the following:

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

or

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

However, is there some way to refer to the project root folder?

Upvotes: 55

Views: 64135

Answers (3)

yasif khan
yasif khan

Reputation: 1

I have the path set something like this:

spring.datasource.url=jdbc:h2:file:C:\Users\ASUS\OneDrive\Desktop\Preparation\db

And then I got the error:

A file path that is implicitly relative to the current working directory is not allowed in the database URL "jdbc:h2:file:c:usersasusonedrivedesktoppreparationdb". Use an absolute path, ~/name, ./name, or the basedir setting instead. [90011-224]] [n/a]

Then I just changed the backward slash into a forward slash like this:

spring.datasource.url=jdbc:h2:file:C:/Users/ASUS/OneDrive/Desktop/Preparation/db

The error is gone. I only changed the slash to a forward slash, which is backward in my laptop.

Upvotes: 0

Sijo  Song
Sijo Song

Reputation: 151

A fixed or relative path can be used. When using the URL jdbc:h2:file:./data/sample http://www.h2database.com/html/faq.html

now a relative path can be used.

for example, jdbc:h2:file:./../../h2db;

Upvotes: 7

Roman
Roman

Reputation: 5699

Ok, I did a little research and found this in the changelog (http://www.h2database.com/html/changelog.html):

Implicit relative paths are disabled (system property "h2.implicitRelativePath"), so that the database URL jdbc:h2:test now needs to be written as jdbc:h2:./test.

In H2 starting from version 1.4.177 Beta, implicit relative paths are not allowed anymore. Therefore, in your case the url should be written with a explicit relative path: db.default.url="jdbc:h2:./data/db".

Upvotes: 88

Related Questions