在使用h2之前,我折騰了一下sqlite3數據庫,主要想通過內嵌的方式集成到springboot項目中,用以解決算法服務常用參數存儲問題。在完成所有配置后,數據插入和查詢功能一切正常,但是jpa無法自動在sqlite3中創建對應的標,手動方式創建表后,jpa也無法將數據寫入表中,查詢返回結果為空。在查遍百度和谷歌沒找到解決方案后,只能放棄,投奔h2.
H2是一個很小的嵌入式數據庫引擎,它提供JDBC、ODBC訪問接口,支持三種連接方式:
- 內嵌模式(通過JDBC進行本地連接,應用和數據庫在同一個JVM中)
- 服務器模式(通過JDBC或ODBC或TCP/IP進行遠程連接)
- 混合模式(同時支持本地和遠程連接)
本文主要采用內嵌模式來使用h2,數據保存在本地文件匯總。
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
集成h2所需要的jar比集成sqlite3少很多,配置起來也方便很多。
application.yml
spring:
application:
name: demo
datasource:
driverClassName: org.h2.Driver
url: jdbc:h2:file:d:/tools/h2/mydb;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1
platform: h2
username: ***
password: ***
jpa:
database-platform: org.hibernate.dialect.H2Dialect
# generate-ddl: false
show-sql: true
hibernate:
ddl-auto: update # 自動建表
h2: # h2的web管理端配置
console:
enabled: true
path: /console
settings:
trace: false
web-allow-others: true
h2 采用以本地文件形式存儲數據僅支持同一時刻一個客戶端訪問,如果要支持多客戶端訪問需要采用服務器方式部署。h2 的 bin 目錄下 b2.bat、h2.sh 分別為 windows 和 linux 下的啟動腳本,在 h2 啟動后,將上面配置文件中的url設置為jdbc:h2:tcp://localhost/~/mydb即可。
entity類
package com.****.****.pojo.po;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "t_city_temperature_per_month")
public class CityTemperaturePerMonthPo implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private Integer id;
@Column(name = "city_id")
private String cityId;
@Column(name = "month")
private int month;
@Column(name = "temperature_value")
private double temperatureValue;
}
Entity、Table、Id、GeneratedValue、Column全部來自於javax.persistence,沒特殊需求不用去手動配置DataSourceConfig和JpaConfig以及連接池,畢竟算法服務常用的參數不是太多。
web頁面管理h2
啟動springboot程序后,可以在瀏覽器中輸入http://localhost:8080/console進入web管理頁面,其中8080為springboot程序的啟動端口。

JDBC URL選項輸入時一定要注意,保持和application.yml中數據庫的位置一致。我開始的時候通過彈出手動定位數據庫文件的路徑,導致登錄時用戶名和密碼錯誤,只能以無密碼無用戶的方式進入,進去后找不到jpa創建的表。這個坑差點讓我放棄折騰嵌入式數據庫。
dbvis連接h2查看數據
dbvis這個數據庫客戶端是這次為了查看h2中的數據發現的,此前一直用的Navicat Premium不支持連接h2。連接h2的過程中大致看了,dbvis支持的數據庫種類還是很多的,界面還行。通過dbvis查看h2的結果如下:

