跳到主要内容

如何在 Spring Boot 使用 H2 Embedded DB 简单笔记

· 3 分钟阅读
Eric Cheng

Embedded DB 是很好用的工具,有时候为了一个小专案还要特别去 PostgreSQL 或 MySQL 建 database 会觉得杀鸡焉用牛刀,如果只用文字档处理又觉得不足,建个微型 DB 直接包在 Spring Boot 的专案中就很适合了

Spring Boot 支援的 Embedded DB 有三种

  • Derby
  • H2
  • HyperSQL

Spring Boot Embedded DB

网路有些比较文,ex: 文章一文章二,没有很认真去比较,但看起来大致上差异不大,而 H2 使用的人稍微多一点,效能稍微好一点,所以就选 H2 来用

新增 build.gradle 内容

在 build.gradle 新增一行

runtimeOnly 'com.h2database:h2'

这个测试专案使用 web,完整 dependencies 如下

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

新增 application.properties 内容

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

启动专案

这时将专案启动后,直接点选 http://localhost:8080/h2-console/ 就可以看到以下画面

H2-Console

填入 application.properties 设定的内容,点选「Connect」,就可以成功登入

H2-Console 2

如何建立新的 database

文件中预设使用的是 datasource 是使用记忆体

spring.datasource.url=jdbc:h2:mem:testdb

实务上不太实用,你总不希望记忆体一但清空,资料就不见吧,H2 提供使用档案储存的选项

首先参考官方文件:Creating New Databases

先找到 h2 的 jar 档,如果是使用 gradle 的话,一般就在 gradle 的目录,直接在 cmd 执行官方文件的指令就可以建新的 database

> java -cp h2-*.jar org.h2.tools.Shell

Welcome to H2 Shell
Exit with Ctrl+C
[Enter] jdbc:h2:mem:2
URL jdbc:h2:./path/to/database
[Enter] org.h2.Driver
Driver
[Enter] sa
User your_username
Password (hidden)
Type the same password again to confirm database creation.
Password (hidden)
Connected

sql> quit
Connection closed

建出来的档案档名为 xxxx.mv.db,假设你把档案放在 windows 的目录 c:\ooo\ 下,只要修改 application.properties 的设定

spring.datasource.url=jdbc:h2:file:c:/ooo/xxxx

就可以读到 c:\ooo\xxxx.mv.db 的资料

如何在读取其他电脑的 H2 DB

在 Spring Boot 启动的 H2 DB 如果用刚才说的 http://localhost:8080/h2-console/ 只能在本机读到资料,在开发阶段没有问题,但如果放到测试环境,别的使用者要在本机读取测试环境的资料就会是 404

再修改 application.properties,增加两行

spring.h2.console.enabled=true
spring.h2.console.settings.web-allow-others=true

这样别台电脑也可以使用 h2-console 读取 H2 DB 的资料了

版权声明


這是 google 廣告