如何在 Play Framework 2.4 中使用相对于项目根目录的路径来进行 H2 数据库文件配置?

问题描述 投票:0回答:3

我们正在开发 Play 2.4 应用程序(Java API)。

出于开发目的,我们希望使用持久性 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"

但是,有什么方法可以引用项目根文件夹吗?

jdbc h2 relative-path persistent playframework-2.4
3个回答
88
投票

好吧,我做了一些研究,并在变更日志中发现了这一点(http://www.h2database.com/html/changelog.html):

禁用隐式相对路径(系统属性“h2.implicitRelativePath”),因此数据库 URL jdbc:h2:test 现在需要编写为 jdbc:h2:./test。

H2从1.4.177 Beta版本开始,不再允许隐式相对路径。因此,在您的情况下,应该使用明确的相对路径编写 url:

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


7
投票

可以使用固定路径或相对路径。使用 URL jdbc:h2:file:./data/sample 时 http://www.h2database.com/html/faq.html

现在可以使用相对路径了。

例如,

jdbc:h2:file:./../../h2db;


0
投票

我的路径设置如下= spring.datasource.url=jdbc:h2:file:C:\Users\ASUS\OneDrive\Desktop\Preparation\db

然后我收到错误 this = 数据库 URL“jdbc:h2:file:c:usersasusonedrivedesktoppreparationdb”中不允许隐式相对于当前工作目录的文件路径。请改用绝对路径、~/name、./name 或 basedir 设置。 [90011-224]] [不适用

然后我只需将反斜杠更改为正斜杠,如下所示 = spring.datasource.url=jdbc:h2:file:C:/Users/ASUS/OneDrive/Desktop/Preparation/db

i 错误消失了。我只是将斜线更改为向前,而在我的笔记本电脑中,斜线是向后的。希望这对你有帮助

© www.soinside.com 2019 - 2024. All rights reserved.