【问题标题】:Spring Boot + IntelliJ + Embedded Database = HeadacheSpring Boot + IntelliJ + 嵌入式数据库 = 头痛
【发布时间】:2015-10-08 12:34:46
【问题描述】:

要么我错过了一些深藏在某些文档(Spring、Spring Boot、H2、HSQLDB、Derby、IntelliJ)中的核心概念,要么我已经盯着这个看太久了。

我有一个 Spring Boot 项目正在进行。一开始尝试使用和初始化 H2 DB,尝试在 IntelliJ 中连接到它,结果发现如果不放弃我的长子 (Connect to H2 database using IntelliJ database client),我可能无法轻松浏览数据库。

所以我搬到了 DerbyDB。同样的事情 - db 根文件夹是在我的应用程序中创建的,我在 IntelliJ 中连接到它,但我的表是刚从启动应用程序时创建的,无法浏览。

我什至尝试过 SQLite,但对 SQLite 的支持不太好,并且某些更新功能不可用,但我至少可以在 IntelliJ 浏览器中找到我的表!

我只想要一个简单的单文件嵌入式数据库,我可以轻松地使用、浏览和玩游戏。有什么建议吗?!

当我运行应用程序时,我看到架构已导出:

2015-07-19 09:37:45.836  INFO 98608 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000227: Running hbm2ddl schema export
Hibernate: drop table user_roles if exists
Hibernate: drop table users if exists
Hibernate: create table user_roles (id bigint generated by default as identity, role_name varchar(255), version bigint, user_id bigint, primary key (id))
Hibernate: create table users (id bigint generated by default as identity, email varchar(255), password varchar(255), username varchar(255), version bigint, primary key (id))
Hibernate: alter table user_roles add constraint FK_g1uebn6mqk9qiaw45vnacmyo2 foreign key (user_id) references users
2015-07-19 09:37:45.849  INFO 98608 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport  : HHH000230: Schema export complete

在 IntelliJ 中,什么都没有(根据 heenenee 的建议,使用远程 jdbc:h2:./test;AUTO_SERVER=TRUE 源):

我看到一些投票结束,因为它不清楚我在问什么:

如何使用 H2、HSQLDB 或 Derby 数据库开发应用程序并使用 IntelliJ 连接到它们?

【问题讨论】:

  • 使用./test作为路径将产生2个db:一个在你的spring boot项目的工作目录中,一个在IntelliJ的工作目录(或附近)。在两个地方都使用~/test,这样两个 URL 都指向文件系统上的相同位置。

标签: spring intellij-idea spring-boot h2


【解决方案1】:

H2 Automatic Mixed Mode 应该适合你。使用jdbc:h2:~/mydbInHomeDir;AUTO_SERVER=TRUE 作为您的spring.datasource.url。在 IntelliJ 中,创建一个 remote H2 数据源并使用完全相同的 JDBC URL。您可能必须显式按下 IntelliJ 数据库窗口中的同步按钮才能显示数据库表。

【讨论】:

  • 这对我有用。谢谢你。有关 AUTO_SERVER 模式的更多详细信息,请参见 [link] h2database.com/html/features.html#auto_mixed_mode
  • 如果 db 在内存中,您有什么建议吗?我有 h2 内存数据库,它有 public.roles 表,但是当我从 intellij 运行查询时,它显示:“找不到表“角色”;SQL 语句:”。我认为 IDEA 正在创建自己的内存数据库,而不是尝试连接我项目中的数据库
  • 访问控制台:localhost:8080/h2-console。然后在“JDBC URL”字段中,也输入jdbc:h2:~/mydbInHomeDir;AUTO_SERVER=TRUE
  • 对于以后发现这一点的其他人:REMOTE 部分非常重要。 IntelliJ 不断将其设置回嵌入式。
【解决方案2】:

如果您按照本文中的步骤操作:https://techdev.io/en/developer-blog/querying-the-embedded-h2-database-of-a-spring-boot-application

我认为它将帮助通过 tcp 服务器获取带有 H2 内存数据库的 Spring Boot 应用程序,以便您可以使用 IntelliJ 数据库客户端连接到它。

【讨论】:

  • 你能提供另一个链接吗> 因为你上面提到的那个已经过期了。它正在重定向到其他地方
  • 这种情况说明了为什么最好在 Stackoverflow 答案中编写解决方案,而不是链接到可能会消失的外部站点。
【解决方案3】:

我有类似的问题。这是由于休眠的默认create-drop ddl 策略。 在应用程序关闭后使用这种策略休眠会在会话结束时破坏模式,这就是 IntelliJ 不显示任何内容的原因。将 ddl 策略更改为create,hibernate 将创建架构并在下一次应用程序启动时销毁以前的数据。

这是我的配置示例:

application.yml

spring:
  datasource.url: jdbc:h2:./db/testDb
  jpa.hibernate.ddl-auto: create

IntelliJ 数据库属性

结果

【讨论】:

  • 谢谢你,也许它会帮助别人。我已经转向其他框架。
【解决方案4】:

添加到上面提到的heenenee。如果您不指定 AUTO_SERVER,则仅允许一个连接到您的 H2 实例。

我正在使用带有 spring-data-jpa 的 spring-boot。确保为代表每个表的实体声明了 @Entity。

以下是我的 application.yml / application.properties

spring.datasource.url: 
jdbc:h2:file:/Users/blah[![enter image description here][1]][1]/db/vlad4;AUTO_SERVER=TRUE
spring.datasource.username: sa
spring.datasource.password:

spring:
  jpa:
    hibernate:
      ddl-auto: create #will create schema based on entities
    show-sql: true

启动您的应用程序并将一些数据导入其中。如果类路径中有 import.sql,Spring boot 将自动导入您的数据 例如:/src/main/resources/import.sql

像这样配置你的 IntelliJ

如果您不使用 IntelliJ,请下载服务器/客户端组合 @ http://www.h2database.com/html/download.html 解压并启动基于浏览器的客户端:

h2/bin: java -cp h2*.jar org.h2.tools.Server

通过指定连接字符串连接到您的嵌入式数据库:

【讨论】:

  • 是的,它成功了,谢谢!你能帮我用DriverManager.getConnection 连接到这个数据库吗?我已将相同的AUTO_SERVER=TRUE 添加到它的 URL 中,但它仍然看不到表格:(
  • UPD:已解决。当时出于某种原因重新创建了数据库。再次简单地创建了一个表,应用程序终于找到了它。
【解决方案5】:

使用此处的示例通过控制台和 TCP 公开内存数据库,我能够根据屏幕截图使用 H2 控制台和 IntelliJ 客户端进行连接。

https://stackoverflow.com/a/52949164/2930427

使用 IntelliJ 连接 - jdbc:h2:tcp://localhost:9092/mem:default

使用 H2 控制台连接:jdbc:h2:mem:default

例如application.yml

spring:
  application:
    name: example-service
  r2dbc:
    url: r2dbc:pool:h2:mem:///default?options=DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
    username: testuser
    password: testpass
    pool:
      initial-size: 100
      max-size: 500
      max-idle-time: 30m
      validation-query: SELECT 1

【讨论】:

    猜你喜欢
    • 2018-06-13
    • 1970-01-01
    • 2017-07-01
    • 2018-03-21
    • 2015-10-07
    • 1970-01-01
    • 2020-01-25
    • 2017-07-11
    • 1970-01-01
    相关资源
    最近更新 更多