Spring Boot 集成 H2 數據庫

配置詳解

配置使用 YML 格式配置文件

spring:
  datasource:
    url: jdbc:h2:~/testdb
    username: root
    password: root
    driverClassName: org.h2.Driver
    # 數據初始化設置
    schema: classpath:schema.sql
    data: classpath:data.sql
    platform: h2
h2:
    console:
      enabled: true
      path: /h2
      settings:
        web-allow-others: true
        
請不要直接複製此配置,格式可能存在問題。此處項目每次執行時都會執行一遍 schema.sql、data.sql 請注意修改sql。另外 此處的 spring.datasource.schema/data 爲默認配置,此處配置只是爲了讓你知道,意思就是你配不配都會讀取classpath 下的這兩個文件,除非文件不存在!
  • spring.datasource.url = jdbc:h2:testdb

    • 數據庫URL始終需要jdbc:h2:從此數據庫開始識別 默認情況下,如果嵌入 URL中指定的數據庫尚不存在,則會自動創建一個新的(空)數據庫。創建數據庫的用戶自動成爲此數據庫的管理員。

    • 按照設計,內存數據庫是易失性的,當我們重新啓動應用程序時數據將丟失。我們可以使用基於文件的存儲來改變這種行爲。爲此,我們需要更新spring.datasource.url=jdbc:h2:~/testdb 這裏使用嵌入模式,使用本地的數據庫。

      嵌入模式有以下幾種示例:

      jdbc:h2:[file:][<path>]<databaseName>
      jdbc:h2:~/test
      jdbc:h2:file:/data/sample
      jdbc:h2:file:C:/data/sample (Windows only)
      
      jdbc:h2:[file:][<path>]<databaseName>,前綴file:是可選的。如果不使用或僅使用相對路徑,則將當前工作目錄用作起點。路徑和數據庫名稱的區分大小寫取決於操作系統,但建議僅使用小寫字母。數據庫名稱長度必須至少爲三個字符(限制File.createTempFile)。數據庫名稱不得包含分號。要指向用戶主目錄,請使用~/,如:jdbc:h2:~/test。
      
      ~/在windows或者CentOS中指的是當前用戶的根目錄 例如CentOS /home/{currentUser}/
      
      如果使用  ~/ 則在你的C盤 C:\Users\[username] 下創建一個.h2.server.properties 文件,
      配置文件包含應用程序的設置,並在首次啓動H2控制檯時自動創建。支持的設置是:
          webAllowOthers:允許其他計算機連接。
          webPort:H2控制檯的端口
          webSSL:使用加密的TLS(HTTPS)連接。
          webAdminPassword:用於訪問H2控制檯的首選項和工具的密碼。
          
      你可以在控制檯執行sql命令 SCRIPT 以備份數據
      

    注意:數據庫URL始終需要jdbc:h2: 開始,本示例使用嵌入模式。除此外還有服務器模式以及混合模式。此處詳解嵌入模式,關於其他模式的用法請自行參考官網 OR 簡略說明

    URL後可加上配置 格式爲 ;配置

  • spring.datasource.username / spring.datasource.password

    默認情況下,Spring Boot將應用程序配置爲使用用戶名sa和空密碼連接到內存存儲.但是,我們可以通過將以下屬性添加到application.properties文件來更改這些參數:
    spring.datasource.username=sa
    spring.datasource.password=password
    
  • spring.datasource.platform

    此處涉及到H2 的兼容模式。

    所有數據庫引擎的行爲都有所不同。在可能的情況下,H2支持ANSI SQL標準,並嘗試與其他數據庫兼容。但是仍然存在一些差異:

    在MySQL中,默認情況下,文本列不區分大小寫,而在H2中,它們區分大小寫。但是,H2也支持不區分大小寫的列。要使用不區分大小寫的文本創建表,請附加IGNORECASE=TRUE到數據庫URL(示例:) jdbc:h2:~/test;IGNORECASE=TRUE

    此處示例暫不考慮兼容其他數據庫,所以使用 spring.datasource.platform=h2

    如果你有此方面需求,請參考官網 Compatibility。並在解決此問題之後分享出來。

  • h2.console.*

    默認情況下,H2數據庫的控制檯視圖已禁用。我們必須使它能夠在瀏覽器中查看和訪問它。請注意,我們可以自定義H2控制檯的URL,默認情況下是'/h2-console'。
    
    # 啓用 H2 Console
    spring.h2.console.enabled=true
     
    # 自定義的 H2 Console URL  他相對與項目目前正在運行的端口,因此 此示例訪問的路徑爲 
    # http://127.0.0.1:8080/h2  8080是默認的端口,你可以通過server.port 在 此配置文件中配置
    spring.h2.console.path=/h2
    
    # 允許遠程登錄
    spring.h2.settings.web-allow-others = true
    
    默認情況下,不允許從TCP連接或Web界面遠程創建數據庫。出於安全原因,不建議啓用遠程數據庫創建。創建新數據庫的用戶將成爲其管理員,因此獲得與H2相同的JVM訪問權限,以及與Java和系統帳戶允許的操作系統相同的訪問權限。建議使用嵌入式URL,本地H2控制檯或Shell工具在本地創建所有數據庫。
    
  • spring.datasource.schema / spring.datasource.data

    在初始化時創建模式並插入數據

    我們可能希望使用一些固定模式(DDL)初始化數據庫,並在應用程序就緒之前將默認數據(DML)插入表中運行業務用例。

    我們可以通過將sql文件放入資源文件夾(/src/main/resources/)來實現這一點。

    • schema.sql - 初始化模式ie.create表和依賴項。 初始化表sql
    • data.sql - 插入默認數據行。 初始化數據sql

    注意: 此處sql必須符合 H2 語法 參考 官網語法

注意: 訪問 H2 web Console 時,請注意修改你的 [JDBC URL] 此處的[JDBC URL] 是指打開 http://127.0.0.1:8080/h2 頁面顯示的 [JDBC URL] 修改爲 你的配置文件中的 spring.datasource.url 的值~!

參考鏈接

https://howtodoinjava.com/spring-boot2/h2-database-example/

http://www.h2database.com/html/tutorial.html

https://www.baeldung.com/spring-boot-h2-database

https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/reference/html/boot-features-sql.html#boot-features-sql-h2-console

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章