在开发基于 Spring 的应用程序时,您会经常在开发过程中使用 H2 内存数据库。它轻便、快速且易于使用。它通常可以很好地模拟您在生产中经常看到的其他 RDBM(即 Oracle、MySQL、Postgres)。在开发 Spring 应用程序时,通常使用 JPA/Hibernate 并利用 Hibernate 的模式生成功能。使用 H2,每次启动应用程序时,Hibernate 都会创建您的数据库。因此,数据库以已知且一致的状态启动。它还允许您开发和测试 JPA 映射。
H2 附带一个基于 Web 的数据库控制台,您可以在开发应用程序时使用它。这是查看 Hibernate 创建的表并对内存数据库运行查询的便捷方式。这是 H2 数据库控制台的示例。
为 H2 数据库控制台配置 Spring Boot
H2 Maven 依赖
Spring Boot 内置了对 H2 数据库的强大支持。如果您使用 Spring Initializr 将 H2 作为选项包含在内,则 H2 依赖项将添加到您的 Maven POM,如下所示:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
此设置非常适合开箱即用地使用 H2 数据库运行我们的 Spring Boot 应用程序,但如果要启用 H2 数据库控制台的使用,我们需要从运行时更改 Maven 的范围以进行编译。这是支持我们需要对 Spring Boot 配置进行的更改所必需的。只要去掉scope语句,Maven就会变成默认的compile。
Maven POM 中的 H2 数据库依赖项应如下所示:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
弹簧配置
通常,您会将 web.xml 文件中的 H2 数据库配置为 servlet,但 Spring Boot 将使用 Tomcat 的嵌入式实例,因此我们无权访问 web.xml 文件。 Spring Boot 确实为我们提供了一种机制,可用于通过 Spring Boot ServletRegistrationBean 声明 servlet。
以下 Spring Configuration 声明了 H2 数据库控制台的 servlet 包装器并将其映射到 /console 的路径。
Web配置.java
注意 – 请务必导入正确的 WebServlet 类(来自 H2)。
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
如果您没有将 Spring Security 与 H2 数据库控制台一起使用,这就是您需要做的全部。当您运行 Spring Boot 应用程序时,您现在可以通过 http://localhost:8080/console 访问 H2 数据库控制台。
弹簧安全配置
如果您在 Spring Boot 应用程序中启用了 Spring Security,您将无法访问 H2 数据库控制台。使用 Spring Boot 下的默认设置,Spring Security 将阻止对 H2 数据库控制台的访问。
要在 Spring Security 下启用对 H2 数据库控制台的访问,您需要更改三件事:
- 允许所有访问 url 路径 /console/*。
- 禁用 CRSF(跨站点请求伪造)。默认情况下,Spring Security 将 防止 CRSF 攻击。
- 由于 H2 数据库控制台在框架内运行,因此您需要在 Spring Security 中启用它。
以下 Spring 安全配置将:
- 允许对根 url(“/”)的所有请求(第 12 行)
- 允许对 H2 数据库控制台 url(“/console/*”)的所有请求(第 13 行)
- 禁用 CSRF 保护(第 15 行)
- 在 Spring Security 中禁用 X-Frame-Options (第 16 行)
注意 :这不是您想要用于生产网站的 Spring 安全配置。这些设置仅用于支持 Spring Boot Web 应用程序的开发并启用对 H2 数据库控制台的访问。我想不出一个示例,您实际上希望在生产数据库上公开 H2 数据库控制台。
安全配置.java
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
使用 H2 数据库控制台
只需启动您的 Spring Boot Web 应用程序并导航到 url http://localhost:8080/console,您将看到 H2 数据库控制台的以下登录屏幕。
Spring Boot 默认 H2 数据库设置
在登录之前,请确保您具有正确的 H2 数据库设置。我很难找到 Spring Boot 使用的默认值,并且不得不使用 Hibernate 日志记录来找出 Spring Boot 使用的 JDBC Url。
价值 | 环境 |
司机班 | org.h2.驱动程序 |
JDBC 网址 | jdbc:h2:内存:testdb |
用户名 | 萨 |
密码 | <空白> |
结论
我使用 Grails 框架进行了大量开发工作。 Grails 团队在 Grails 2 的发布中添加了 H2 数据库控制台。我很快就爱上了这个特性。好吧,也许不是“爱”,但它成了我经常使用的 Grails 的一个特性。当您使用 Spring/Hibernate 开发应用程序时(就像您使用 Grails 一样),您将需要查看数据库。 H2 数据库控制台是一个供您使用的好工具。
也许我们会在未来的 Spring Boot 版本中将其视为默认选项。但是现在,您需要自己添加 H2 数据库控制台。你可以看到这不是很难做到。