【问题标题】:H2 Database created with spring-boot-starter-data-jpa but not with spring-boot-starter-data-jdbc使用 spring-boot-starter-data-jpa 创建的 H2 数据库,但不是使用 spring-boot-starter-data-jdbc 创建的
【发布时间】:2020-05-21 13:22:13
【问题描述】:

我是春天的新手。我正在尝试使用 H2 数据库和 JDBC(不是 JPA/Hibernate)。

所以使用 Spring Initializr,当我添加这些依赖项时:

  • spring-boot-starter-web
  • spring-boot-starter-data-jpa
  • h2

并将此属性设置为 true :spring.h2.console.enabled=true

数据库mem:testdb 已创建,我可以连接到它:localhost:8080/h2-console

但是当我将 jpa 依赖项更改为:

  • spring-boot-starter-data-jdbc

数据库未创建,我收到此错误消息:

Database "mem:testdb" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149 (Help)

所以我想知道为什么它不能与 JDBC 一起工作,以及你是否知道使它工作的解决方案。

我在网上找到了两篇文章,他们似乎可以使用JDBC创建数据库:

更新:

我尝试在我的个人电脑上在家中做同样的事情,它可以工作......

我不知道为什么它不能在作业计算机上工作,尽管它可以与 JPA 一起工作。

在日志中,它缺少这些行:

com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...

com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.

o.s.b.a.h2.H2ConsoleAutoConfiguration : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'

更新2:

我找到了解决方案:

正如我所说,我正在使用 Spring Initializr 来引导项目。在job pc上无法使用上一个版本的Spring boot(2.2.4),所以选择了2.1.12

Version Spring Boot

在这个版本中,它适用于 JPA,但不适用于 JDBC...

【问题讨论】:

标签: java spring hibernate spring-boot jpa


【解决方案1】:

来自documentation

嵌入式数据库需要依赖 spring-jdbc 自动配置。

spring-boot-starter-data-jpaspring-boot-starter-data-jdbc 通过对 spring-boot-starter-jdbc 的依赖传递性地获取 spring-jdbc

这意味着对于这两个依赖项,h2 将被自动配置。

更新:

对于这两种配置,我都可以使用http://localhost:8080/h2-console/ 访问数据库

当 Spring Boot 应用程序启动时,您将获得类似的日志

2020-02-05 01:27:16.135[0;39m [32m INFO[0;39m [35m55966[0;39m [2m---[0;39m [2m[           main][0;39m [36mo.s.b.a.h2.H2ConsoleAutoConfiguration   [0;39m [2m:[0;39m H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:testdb'

【讨论】:

  • 正如我在更新中所说,这条线不见了,但它可以在我的个人电脑上使用...
【解决方案2】:

您提供的两个链接都允许我创建具有以下依赖项的 Spring Boot 应用程序:Web、JDBC、H2、DevTools。如果将 'spring-boot-starter-jdbc' 依赖项更改为 'spring-boot-starter-data-jpa' 一切都以相同的方式工作,例如H2 数据库已创建并可访问。确保您在 application.properties 文件中的两种情况下都指定了相同的配置,'spring.datasource.url' 没有被更改。

【讨论】:

  • 我在两种情况下都使用相同的属性:spring.datasource.url=jdbc:h2:mem:testdb(这是默认值),但仍然无法正常工作
【解决方案3】:

我找到了解决方案:

正如我所说,我正在使用 Spring Initializr 来引导项目。在job pc上无法使用上一个版本的Spring boot(2.2.4),所以选择了2.1.12

版本 Spring Boot

在这个版本中,它适用于 JPA,但不适用于 JDBC...

【讨论】:

    猜你喜欢
    • 2021-11-11
    • 2017-11-29
    • 2021-01-18
    • 2021-02-09
    • 2015-11-28
    • 2018-08-06
    • 2018-03-01
    • 2021-06-12
    • 2014-12-29
    相关资源
    最近更新 更多