springboot + jpa + h2內嵌文件整合


在使用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的結果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM