Nous développons une application Play 2.4 (API Java).
Pour les besoins du développement, nous aimerions utiliser une base de données H2 persistante avec un chemin de fichier de base de données relatif au répertoire racine du projet.
In Comment utiliser une base de données H2 persistante dans Play Framework au lieu d’en mémoire il existait une solution pour Play 2.0:
db.default.url="jdbc:h2:file:data/db"
Cependant, avec Play 2.4, cela ne semble pas fonctionner, mais un message d'erreur s'affiche avec l'exception suivante en bas:
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)
...
Je pouvais obtenir que la connexion fonctionne avec un chemin absolu et avec un chemin relatif au répertoire de base, comme suit:
db.default.url="jdbc:h2:file:/Users/foo/data/db"
ou
db.default.url="jdbc:h2:~/data/db"
Cependant, y a-t-il un moyen de faire référence au dossier racine du projet?
Ok, j’ai fait quelques recherches et trouvé ceci dans le changelog ( http://www.h2database.com/html/changelog.html ):
Les chemins relatifs implicites sont désactivés (propriété système "h2.implicitRelativePath"), de sorte que l'URL de la base de données jdbc: h2: test doit maintenant être écrite sous la forme jdbc: h2: ./ test.
Dans H2 à partir de la version 1.4.177 Beta, les chemins relatifs implicites ne sont plus autorisés. Par conséquent, dans votre cas, l'URL doit être écrit avec un chemin relatif explicite: db.default.url="jdbc:h2:./data/db"
.
Un chemin fixe ou relatif peut être utilisé. Lorsque vous utilisez l'URL jdbc: h2: fichier: ./ data/sample http://www.h2database.com/html/faq.html
maintenant un chemin relatif peut être utilisé.
par exemple, jdbc:h2:file:./../../h2db;