springboot集成liquibase,h2資料庫

来源:https://www.cnblogs.com/jin-zhe/archive/2018/01/05/8203890.html
-Advertisement-
Play Games

Liquibase是一個用於跟蹤、管理和應用資料庫變化的開源的資料庫重構工具。它將所有資料庫的變化(包括結構和數據)都保存在XML文件中,便於版本控制。 Liquibase具備如下特性:* 不依賴於特定的資料庫,目前支持包括Oracle/Sql Server/DB2/MySql/Sybase/Pos ...


Liquibase是一個用於跟蹤、管理和應用資料庫變化的開源的資料庫重構工具。它將所有資料庫的變化(包括結構和數據)都保存在XML文件中,便於版本控制。

Liquibase具備如下特性:
* 不依賴於特定的資料庫,目前支持包括Oracle/Sql Server/DB2/MySql/Sybase/PostgreSQL/Caché/h2等12種資料庫,這樣在資料庫的部署和升級環節可幫助應用系統支持多資料庫。
* 提供資料庫比較功能,比較結果保存在XML中,基於該XML你可用Liquibase輕鬆部署或升級資料庫。
* 以XML存儲資料庫變化,其中以作者和ID唯一標識一個變化(ChangSet),支持資料庫變化的合併,因此支持多開發人員同時工作。
* 在資料庫中保存資料庫修改歷史(DatabaseChangeHistory),在資料庫升級時自動跳過已應用的變化(ChangSet)。
* 提供變化應用的回滾功能,可按時間、數量或標簽(tag)回滾已應用的變化。通過這種方式,開發人員可輕易的還原資料庫在任何時間點的狀態。
* 可生成資料庫修改文檔(HTML格式)
* 提供數據重構的獨立的IDE和Eclipse插件。


Liquibase的核心就是存儲變化的XML

其中,changeSet包含不同的資料庫變化,幾乎涵蓋了所有的資料庫變化類型,具體支持的類型要看API,我這裡給幾個例子:
* 創建和刪除表、視圖、存儲過程、主鍵、外鍵、索引等
* 重命名錶、視圖、列等
* 加入列預設值、唯一約束、非空約束等
* 合併兩個列
* 在一個表的數據的基礎上創建一個字典表
除此之外,Liquibase還允許你運行自己的Sql腳本、執行Shell程式。

springboot集成liquibase

1.添加依賴

  springboot內置了對liquibase整合的支持,我們只需要在項目中引入liquibase的依賴,進行配置即可。
  在pom文件中添加以下依賴:

1 <dependency>
2         <groupId>org.liquibase</groupId>
3         <artifactId>liquibase-core</artifactId>
4 </dependency>

2.配置application.properties(或application.yml)文件

1 liquibase.change-log=classpath:changeLog.xml  //存儲變化的xml文件的位置
2 liquibase.user=sa                             //訪問資料庫的用戶名
3 liquibase.password=                           //訪問資料庫的密碼
4 liquibase.url=jdbc:h2:file:~/.h2/testdb       //訪問資料庫的連接地址
5 liquibase.enabled=true                        //啟用liquibase
6 liquibase.drop-first=false                    //預設為false,如果設置為true,liquibase將首先刪除所有資料庫對象的所有連接的用戶。

3.編寫存儲變化的xml文件

  文件位置與配置文件上位置一致,例如:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <databaseChangeLog
 3         xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
 4         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5         xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
 6         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
 7 
 8     <property name="autoIncrement" value="true" dbms="h2"/>
 9     <changeSet id="init-schema" author="jinzhe" >
10         <comment>init schema</comment>
11         <createTable tableName="user">
12             <column name="id" type="bigint" autoIncrement="${autoIncrement}">
13                 <constraints primaryKey="true" nullable="false"/>
14             </column>
15             <column name="username" type="varchar(20)" >
16                 <constraints  nullable="false" uniqueConstraintName="username"/>
17             </column>
18             <column name="password" type="varchar(20)">
19                 <constraints  nullable="false"/>
20             </column>
21             <column name="email" type="varchar(20)">
22                 <constraints  nullable="false"/>
23             </column>
24             <column name="phone" type="varchar(11)">
25                 <constraints  nullable="false"/>
26             </column>
27             <column name="sex" type="varchar(2)">
28                 <constraints  nullable="false"/>
29             </column>
30             <column name="create_time" type="java.util.Date">
31                 <constraints  nullable="false"/>
32             </column>
33             <column name="update_time" type="java.util.Date">
34                 <constraints  nullable="false"/>
35             </column>
36         </createTable>
37     </changeSet>
38 </databaseChangeLog>

4.啟動項目

 瀏覽器輸入 http://localhost:8080/h2-console ,然後輸入用戶名和密碼,發現此時表已經建好。

5.除此之外,我們還可以通過自己創建SpringLiquibase的方式,來執行change-log文件中的內容。

 1 @Configuration
 2 @EnableConfigurationProperties(LiquibaseProperties.class)
 3 public class DataSourceConfig {
 4     @Bean
 5     public DataSource dragonHADataSource() throws Exception {
 6         return new DragonHADatasourceBuilder().build("dragon/dragon-ha-config.xml");
 7     }
 8     @Bean
 9     public SpringLiquibase liquibase(DataSource dataSource, LiquibaseProperties liquibaseProperties) throws Exception{
10         SpringLiquibase liquibase=new SpringLiquibase();
11         liquibase.setDataSource(dataSource);
12         liquibase.setChangeLog(liquibaseProperties.getChangeLog());
13         liquibase.setShouldRun(liquibaseProperties.isEnabled());
14         liquibase.setDropFirst(liquibaseProperties.isDropFirst());
15         return liquibase;
16     }
17 }

  在這裡我們為 SpringLiquibase 註入了一個數據源 DragonHADataSource 。
  SpringLiquibase實現 InitializingBean 介面,覆寫了 afterPropertiesSet() 方法,這個方法是 change-log 文件處理的入口。

6.集成h2資料庫

  在 application.properties 文件(或者 application.yml 文件)中添加以下設置:

 1 #thymeleaf模板設置
 2 spring.thymeleaf.mode=HTML5
 3 spring.thymeleaf.encoding=UTF-8
 4 spring.thymeleaf.content-type=text/html
 5 spring.thymeleaf.cache=false
 6 
 7 #h2資料庫設置
 8 spring.jpa.show-sql=true
 9 spring.jpa.hibernate.ddl-auto=none
10 spring.datasource.url = jdbc:h2:file:~/.h2/testdb
11 spring.h2.console.enabled=true
12 
13 #liquibase設置
14 liquibase.change-log=classpath:changelog/init.xml
15 liquibase.user=sa
16 liquibase.password=
17 liquibase.url=jdbc:h2:file:~/.h2/testdb
18 liquibase.enabled=true
19 liquibase.drop-first=true

   在h2資料庫設置里應該通過 spring.jpa.hibernate.ddl-auto=none 關閉hibernate的資料庫自動創建|更新|驗證資料庫表結構功能,此時,liquibase和h2資料庫使用同一個數據源。

這樣,每次重啟項目的時候,都可以進行CURD操作,但是重啟項目數據都會初始化,方便開發者使用。

 

 

參考:https://segmentfault.com/a/1190000007002140

          http://blog.csdn.net/liuchuanhong1/article/details/54629967

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • VirtualBox安裝CentOS後,再安裝增強功能就可以共用文件夾、粘貼板以及滑鼠無縫移動,主要步驟如下: 1、yum -y update 2、yum -y install g++ gcc gcc-c++ make kernel-* # 主要是在安裝增強工具提示沒有安裝這些軟體 3、yum -y ...
  • 獲取表結構的一些簡要信息,可以生成自己需要的字典,簡單又實用! 以數據表PP_MO為例: ...
  • 學習目標 -理解分層查詢概念 -創建樹形組織報告 -格式化分層數據 -樹形組織排除分支 分層查詢 語法 SELECT [LEVEL],<column>,exper ... FROM <table_name> [WHERE condition(s)] START WITH condition(s) C ...
  • 操作系統 : CentOS7.3.1611_x64 go語言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 源碼路徑: github.com/influxdata/influxdb/cmd/influxd 程式入口(main.go): 在main函數中,調用Main.Ru ...
  • 1. 優先安裝軟體1. net framework3.5。2. 在安裝SQL SERVER 2012前需要3.5的支持。在WIN 2012系統可以在系統管理的添加角色和功能中安裝,如下將【.NET Framework 3.5功能】、【.NET Framework 4.5功能】下的組件全部勾選上。3.... ...
  • Sqoop是一個用來將Hadoop和關係型資料庫中的數據相互轉移的工具,可以將一個關係型資料庫(例如 : MySQL ,Oracle ,Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型資料庫中。Sqoop是為大數據集設計的。Sqoop支持增量更新,將新記 ...
  • SQL Server授權購買簡單介紹 之前有同事問我,使用盜版序列號的SQL Server到底有沒有性能限制,之前本人一直沒有深入研究過,後來經過一番資料搜集和查證,彙總成這篇文章 微軟的SQL Server產品分為兩種賣法 1、盒裝 1、盒裝 :Server+CAL授權方式(SQL2017取消了S ...
  • 概念對比介紹 相信有些人會對ORACLE當中的AMM(Automatic Memory Management)與ASMM(Automatic Shared Memory Management)有些迷惑或混淆,不清楚兩者的異同,本文會從幾個方面來總結一下兩者的異同。如有不足或疏漏之處,敬請指正! 從O... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...