
1、概览本文将带你了解如何在 [Spring Boot] 中使用 H2 内存 数据库。与其他数据库一样Spring Boot 生态系统对 H2 提供了开箱即用的支持。开发工具2、依赖添加 h2 和 spring-boot-starter-data-jpa 依赖dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependencydependencygroupIdcom.h2database/groupIdartifactIdh2/artifactIdscoperuntime/scope/dependency3、Datasource 配置默认情况下Spring Boot 会配置应用使用用户名sa和空密码连接到内存数据库。不过你也可以通过在application.properties文件中添加以下属性来更改这些参数spring.datasource.urljdbc:h2:mem:testdbspring.datasource.driverClassNameorg.h2.Driverspring.datasource.usernamesaspring.datasource.passwordpassword spring.jpa.database-platformorg.hibernate.dialect.H2Dialect相应的 YAML 配置如下Java编程语言spring: datasource: url: jdbc:h2:mem:mydb username: sa password: password driverClassName: org.h2.Driver jpa: spring.jpa.database-platform: org.hibernate.dialect.H2Dialect内存数据库会在应用重启后会丢失数据可以通过使用基于文件的存储来改变这种行为。更新spring.datasource.url属性spring.datasource.urljdbc:h2:file:/data/demo相应的 YAML 配置如下spring: datasource: url: jdbc:h2:file:/data/demoH2 数据库还可以在 其他模式 下运行。数据管理4、数据库操作在 Spring Boot 中使用 H2 执行 CRUD 操作与使用其他 SQL 数据库相同。4.1、初始化数据库在src/main/resources目录下添加一个data.sql文件用来初始化数据库INSERT INTO countries(id, name)VALUES(1,USA);INSERT INTO countries(id, name)VALUES(2,France);INSERT INTO countries(id, name)VALUES(3,Brazil);INSERT INTO countries(id, name)VALUES(4,Italy);INSERT INTO countries(id, name)VALUES(5,Canada);如上该脚本使用一些示例数据填充 schema 中的countries表。Spring Boot 会自动获取该文件并在嵌入式内存数据库如我们配置的 H2 实例中运行。这是测试或初始化数据库的好方法。可以将spring.sql.init.mode属性设置为never从而禁用这一默认行为。此外还可以配置多个 SQL 文件来加载初始数据。4.2、Hibernate 和data.sql默认情况下data.sql脚本在 Hibernate 初始化之前执行。这使基于脚本的初始化与其他数据库迁移工具如Flyway和Liquibase保持一致。由于我们每次都要重新创建由Hibernate生成的 Schema因此需要设置一个额外的属性软件spring.jpa.defer-datasource-initializationtrue这修改了 Spring Boot 的默认行为并在Hibernate生成 Schema 后填充数据。此外还可以使用schema.sql脚本在使用data.sql填充数据之前对Hibernate生成的 Schema 进行扩展。然而不建议混合使用不同的 Schema 生成机制。5、访问 H2 控制台H2 数据库有一个嵌入式 Web 控制台用于浏览数据库内容和运行 SQL 查询。默认情况下Spring 不会启用 H2 控制台。要启用它需要在application.properties中添加以下属性spring.h2.console.enabledtrue对应的 YAML 配置如下spring: h2: console.enabled:true配置完毕后启动应用。通过浏览器访问控制台登录页面http://localhost:8080/h2-console。使用application.properties中相配置的凭证进行登录编程连接到数据库后会看到一个综合网页页面左侧列出了所有表还有一个用于运行 SQL 查询的文本框Web 控制台具有自动补全功能可提示 SQL 关键字。控制台的轻量级特性使其非常适用于直观检查数据库或直接执行原始 SQL。此外还可以在application.properties中指定以下属性值从而进一步配置控制台spring.h2.console.path/h2-consolespring.h2.console.settings.tracefalse spring.h2.console.settings.web-allow-othersfalse对应的 YAML 如下spring: h2: console: path: /h2-console settings.trace:falsesettings.web-allow-others:false在上面的配置中将控制台路径设置为/h2-console这是相对于运行应用的地址和端口而言的。因此如果应用在http://localhost:9001上运行那么控制台的访问地址是http://localhost:9001/h2-console。此外可以把spring.h2.console.settings.trace设置为false以防止 Trace 输出还可以将spring.h2.console.settings.web-allow-others设置为false禁止远程访问。开发工具关于更多 H2 数据库的配置项你可以参阅 中文文档。6、总结本文介绍了如何在 Spring Boot 中整合、使用 H2 数据库以及如何配置 H2 的 Web 控制台。Refhttps://www.baeldung.com/spring-boot-h2-database