繁体   English   中英

Spring Boot 默认 H2 jdbc 连接(和 H2 控制台)

[英]Spring Boot default H2 jdbc connection (and H2 console)

我只是想查看嵌入式 H2 数据库的 H2 数据库内容,当我没有在application.properties指定任何内容并从 mvn spring:run 开始时,spring-boot 创建该数据库。 我可以看到 hibernate JPA 创建了表,但是如果我尝试在数据库下方的 URL 上访问 h2 控制台,则没有表。

http://localhost:8080/console/

我看到这样的建议: 查看由 Spring 启动的嵌入式 H2 数据库的内容

但是我不知道将建议的 XML 放在 spring-boot 的何处,即使我这样做了,我也不希望在配置外部数据库时h2console不再可用,因此我更有可能需要处理此问题使用某种条件代码(或者可能只是在最理想的情况下允许 spring 自动处理它,其中我只在激活 maven 配置文件时包含 H2)。

有没有人有一些示例代码显示如何让 H2 控制台在启动时工作(以及找出 spring 使用的 jdbc 连接字符串的方法)?

这就是我让 H2 控制台在带有 H2 的 spring-boot 中工作的方式。 我不确定这是否正确,但由于没有其他人提供解决方案,因此我建议这是最好的方法。

就我而言,我为数据库选择了一个特定名称,以便在启动 H2 控制台时可以输入一些内容(在本例中为“AZ”)。 我认为所有这些都是必需的,尽管省略 spring.jpa.database-platform 似乎没有任何伤害。

在 application.properties 中:

spring.datasource.url=jdbc:h2:mem:AZ;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

在 Application.java(或某些配置)中:

@Bean
public ServletRegistrationBean h2servletRegistration() {
    ServletRegistrationBean registration = new ServletRegistrationBean(new WebServlet());
    registration.addUrlMappings("/console/*");
    return registration;
}

然后您可以在 {server}/console/ 访问 H2 控制台。 输入它作为 JDBC URL:jdbc:h2:mem:AZ

从 Spring Boot 1.3.0.M3 ,H2 控制台可以自动配置。

先决条件是:

  • 你正在开发一个网络应用程序
  • Spring Boot 开发工具已启用
  • H2 在类路径上

即使您不使用 Spring Boot Dev Tools,您仍然可以通过将spring.h2.console.enabled设置为true来自动配置控制台

查看文档的这一部分以了解所有详细信息。

请注意,以这种方式配置时,可以通过以下网址访问控制台: http://localhost:8080/h2-console/

我找到了一个关于这个主题的不错的教程:

https://springframework.guru/using-the-h2-database-console-in-spring-boot-with-spring-security/

基本上对我来说正确的 JDBC URL 是: jdbc:h2:mem:testdb

来自http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

H2 Web 控制台(H2ConsoleProperties):

spring.h2.console.enabled=true //Enable the console.
spring.h2.console.path=/h2-console //Path at which the console will be available.

将以上两行添加到我的 application.properties 文件足以访问 H2 数据库 Web 控制台,使用默认用户名 (sa) 和密码(空,因为在 ui 提示时不要输入密码)。

与逐步指南类似的答案。

  1. 开发工具依赖项添加到您的pom.xmlbuild.gradle

马文

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

摇篮

dependencies {
    compile("org.springframework.boot:spring-boot-devtools")
}
  1. http://localhost:8080/h2-console/访问数据库
  2. 指定jdbc:h2:mem:testdb作为 JDBC URL
  3. 您应该会看到您在项目中指定的实体作为表格。

对于直接来自 Spring Initialzr 的Spring Boot 2.1.1

  1. devtools 的默认值为http://127.0.0.1:8080/h2-console/

    • POM: spring-boot-starter, h2, spring-boot-starter-web, spring-boot-devtools
  2. 没有 devtools - 你需要在属性中设置它: spring.h2.console.enabled=true spring.h2.console.path=/h2-console

    • POM: spring-boot-starter, h2, spring-boot-starter-web

一旦你到达那里 - 设置 JDBC URL: jdbc:h2:mem:testdb (默认一个将不起作用)

我在 /resources/application.properties 中只有以下属性。 运行spring boot后,使用这个URL( http://localhost:8080/h2-console/ ),H2控制台中的表是可见的,可以读取查看表数据,也可以运行简单的SQL命令。 一件事,在您的 Java 代码中,在获取数据时,列名称是大写的,即使 schema.sql 使用的是小写名称:)

spring.datasource.initialize=true
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=- 1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true

检查 spring application.properties

spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE

这里 testdb 是数据库定义的确保 h2 控制台在连接时具有相同的值,否则它将连接到默认数据库

在此处输入图片说明

如果您使用 Spring Boot 的开发人员工具,它会默认启用 H2 控制台。 它可以从/h2-console / 访问。 在登录界面上,输入JDBC URL使用值jdbc:h2:mem:testdb 注意mem字符串。

如果您不使用 Spring Boot 的开发人员工具,则可以使用spring.h2.console.enabled=trueapplication.properties启用控制台。 这将在/h2-console下启用/h2-console 如果要更改 URL,则可以使用spring.h2.console.path=my_console_path添加另一个条目。

默认架构名称是testdb

Spring Boot 文档中的更多详细信息。

为了获得表,您需要做的就是创建 2 个 sql 文件 schema.sql(用于创建表)和 data.sql(用于创建表的数据)。 这些文件要放在 src/main/resources 文件夹中。 Spring boot 会自动检测它们并在运行时处理其余部分。

如果您在项目中使用 2 个以上的 DB,请确保使用特定文件,例如 (schema-h2.sql -- for h2 DB,schema-oracle.sql -- for oracle DB)。 data.sql 也是如此。

还要确保通过在 schema.sql 中添加 drop table 语句作为第一条语句来删除表。 避免追加重复记录。

Spring Boot 的链接在这里。

我的 application.properties 如下。

spring.datasource.url=jdbc:h2:~/file/Shiva;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.platform=h2
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.datasource.initialize=true 
spring.error.whitelabel.enabled=true
spring.h2.console.path=/console
spring.datasource.continue-on-error=true
spring.jpa.hibernate.ddl-auto=create
spring.hibernate.hbm2ddl.auto=update
spring.hibernate.show_sql=true

您可以按照以下链接中的步骤操作。

https://springframework.guru/using-the-h2-database-console-in-spring-boot-with-spring-security/

对于 Spring Boot 2.3.3.RELEASE 直接来自 Spring Initialzr:

POM:数据 jpa、h2、web

应用程序属性: spring.h2.console.enabled=true

当您运行应用程序时,在运行控制台中查找如下所示的行:

2020-08-18 21:12:32.664  INFO 63256 --- [           main] o.s.b.a.h2.H2ConsoleAutoConfiguration    : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:eaa9d6da-aa2e-4ad3-9e5b-2b60eb2fcbc5'

现在将上述 JDBC URL 用于 h2-console 并单击Connect

我发现使用 spring boot 2.0.2.RELEASE,在 POM 文件中配置 spring-boot-starter-data-jpa 和 com.h2database 并不足以让 H2 控制台工作。 您必须按如下方式配置 spring-boot-devtools。 或者,您可以按照 Aaron Zeckoski 在这篇文章中的说明进行操作

  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
 </dependency>

登录 H2 控制台时,使用 jdbc:h2:mem:testdb 作为您的路径。

显然,如果您更改了 Spring Boot 属性,您的数据源可能会有所不同,但您似乎正在为如何找到默认值而苦苦挣扎。 这里的所有都是它的! 登录 H2 后,您将看到您的架构。

当我遇到同样的问题时,我犯了一个非常愚蠢的错误。 我添加了 H2 DB 来运行单元测试用例,因此我在pom.xml设置了testscope 使用mvn spring:run运行应用程序时,我删除了scope ,现在可以正常工作了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM