[英]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 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 提示时不要输入密码)。
与逐步指南类似的答案。
pom.xml
或build.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")
}
http://localhost:8080/h2-console/
访问数据库jdbc:h2:mem:testdb
作为 JDBC URL对于直接来自 Spring Initialzr 的Spring Boot 2.1.1 :
devtools 的默认值为http://127.0.0.1:8080/h2-console/
没有 devtools - 你需要在属性中设置它: spring.h2.console.enabled=true spring.h2.console.path=/h2-console
一旦你到达那里 - 设置 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 Boot 的开发人员工具,它会默认启用 H2 控制台。 它可以从/h2-console
/ 访问。 在登录界面上,输入JDBC URL
使用值jdbc:h2:mem:testdb
。 注意mem
字符串。
如果您不使用 Spring Boot 的开发人员工具,则可以使用spring.h2.console.enabled=true
在application.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
设置了test
的scope
。 使用mvn spring:run
运行应用程序时,我删除了scope
,现在可以正常工作了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.