Embedded DB 是很好用的工具,有时候为了一个小专案还要特别去 PostgreSQL 或 MySQL 建 database 会觉得杀鸡焉用牛刀,如果只用文字档处理又觉得不足,建个微型 DB 直接包在 Spring Boot 的专案中就很适合了
Spring Boot 支援的 Embedded DB 有三种
- Derby
- H2
- HyperSQL
网路有些比较文,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/ 就可以看到以下画面
填入 application.properties 设定的内容,点选「Connect」,就可以成功登入
如何建立新的 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 的资料了