【问题标题】:Spring Boot datasource and h2 database pathSpring Boot 数据源和 h2 数据库路径
【发布时间】:2018-11-29 04:00:18
【问题描述】:

在我的 Spring Boot 应用程序中,我正在尝试配置 H2 数据库文件夹的路径。我想通过以下路径放置它:

/home/public/h2

配置如下:

# Datasource
spring.datasource.url=jdbc:h2:file:/home/public/h2
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver

导致以下错误:

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:/home/public/h2". Use an absolute path, ~/name, ./name, or the baseDir setting instead. [90011-197]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) ~[h2-1.4.197.jar:1.4.197]

我也试过spring.datasource.url=jdbc:h2:file:~/home/public/h2,但没用。

我做错了什么以及如何正确配置路径?

【问题讨论】:

  • 波浪号 ~ 扩展到您的主目录。假设您的主目录是 /home/public:除非您的数据库文件位于位置 /home/public/home/public/h2,否则您应该删除波浪号 ~/home/public

标签: spring-boot spring-data-jpa spring-data datasource h2


【解决方案1】:

请尝试使用jdbc:h2:./name(显式相对路径),或

将系统属性 h2.implicitRelativePath 设置为 true(以防止此检查)。

对于 Windows,绝对路径还需要包含驱动器 ("C:/...")

h2.implicitRelativePath=true
spring.datasource.url=jdbc:h2:~/home/public/h2

h2.implicitRelativePath=true
spring.datasource.url=jdbc:h2:file:~/home/public/h2

更多详情请查看这里...

【讨论】:

  • 感谢您的回答。我不清楚必须在哪里设置h2.implicitRelativePath=true。在我的 Spring Boot application.properties 文件中?如果是单一属性spring.datasource.url=jdbc:h2:~/home/public/h2 它不起作用
  • @alexanoid 是的...在application.properties 中设置它再试一次,我希望你检查了那个 url 链接。
  • 我尝试了以下h2.implicitRelativePath=true spring.datasource.url=jdbc:h2:~/home/public/h2 我的文件夹/home/public/h2 仍然是空的,里面没有数据库文件.. 我怎么了?
  • @alexanoid 首先,我们必须检查您的应用程序中是否启用了 h2 数据库。在spring boot中默认没有启用H2数据库,所以在application.properties中将其设置为spring.h2.console.enabled=true然后查看日志以获取详细信息..
  • 把这个类级别的注释放​​在你的类上面@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2) class YourClassName {}试试这个....
【解决方案2】:

你的路径有两个问题,一个在开头,一个在结尾。

作为对问题注释的初始评论,您缺少的第一个是 ~ 是一个特殊的路径字符,它引用您的用户的主目录。

如果您的主目录是 /home/alexanoid,并且您希望数据库位于 /home/public/ 中,请省略 ~,因为 ~/home/public/h2 表示 /home/alexanoid/家庭/公共/h2。

第二个问题是,根据文档,数据库名称必须至少为 3 个字符,因此“h2”不是有效的数据库名称。您需要选择稍长的数据库名称,例如“h2db”。

【讨论】:

    【解决方案3】:

    改变

    spring.datasource.url=jdbc:h2:file:~/home/public/h2

    到:

    spring.datasource.url=jdbc:h2:~/home/public/h2

    【讨论】:

    • 感谢您的回答。不幸的是,spring.datasource.url=jdbc:h2:~/home/public/h2 路径不起作用
    猜你喜欢
    • 2019-09-06
    • 1970-01-01
    • 2017-04-06
    • 2019-01-26
    • 2018-10-09
    • 2017-02-20
    • 2018-08-23
    • 2018-06-13
    • 2016-05-15
    相关资源
    最近更新 更多