未找到 H2 数据库错误:90146。启动时未创建 H2 数据库

Ric*_*yne 5 h2 spring-boot

刚刚从 spring 初始化程序创建了一个简单的 spring-boot 项目。我去添加一个本地 h2 db 进行测试,但无法登录。似乎它在启动时无法创建测试数据库,但无法弄清楚为什么会这样。

spring:
  h2:
    console:
      enabled: true
      path: /h2
  datasource:
    url: jdbc:h2:mem:testdb;
    username: sa
    password:
    driver-class-name: org.h2.Driver
    platform: h2
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        dialect=org:
          hibernate:
            dialect:
              H2Dialect: org.hibernate.dialect.H2Dialect
Run Code Online (Sandbox Code Playgroud)

Database "mem:testdb" not found, and IFEXISTS=true, so we cant auto-create it [90146-199] 90146/90146

Ash*_*til 17

在 Spring 的早期版本中,默认 url 将是 jdbc:h2:mem:testdb 并且 testdb 是默认创建的。从 2.3.0 开始,如果没有提到 url,它将自动生成数据库名称。自动生成的数据库名称可以在 spring 日志中找到。

在此处输入图片说明

  • 对我来说,这是来自顶部的第十二条消息(在控制台中)。消息如下:`osbah2.H2ConsoleAutoConfiguration:H2 控制台位于“/h2-console”。数据库位于“jdbc:h2:mem:36963133-9e0a-40bf-bac6-ed118afb3a97”,我刚刚将位置复制并粘贴到控制台中并连接。 (4认同)

Tar*_*lla 11

我有同样的错误,我发现这些很有帮助:

将 2019 之前的版本添加到 pom.xml 文件中,如下所示:

<dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.193</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

这修复了错误,但不是正确的方法。较新版本的 H2 数据库不会创建新数据库,因为它默认不存在并且出于安全目的启用为 false。

更好的方法是添加对 url 的更改:

jdbc:h2:mem:testdb;IFEXISTS=FALSE;
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。我在我的application.properties文件中进行了更改。


小智 6

只需将其附加到您的application.properties文件中即可。

spring.datasource.url=jdbc:h2:mem:testdb
spring.data.jpa.repositories.bootstrap-mode=default
Run Code Online (Sandbox Code Playgroud)


Sim*_*lli 4

正如斯塔克所说。

只需删除分号:

wrong:    jdbc:h2:mem:testdb;
correct:  jdbc:h2:mem:testdb
Run Code Online (Sandbox Code Playgroud)