最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合Liquibase實現(xiàn)對數(shù)據(jù)庫管理和遷移

 更新時間:2024年11月08日 09:50:01   作者:碼農(nóng)小伙  
Liquibase是一個用于用于跟蹤、管理和應(yīng)用數(shù)據(jù)庫變化的開源工具,通過日志文件(changelog)的形式記錄數(shù)據(jù)庫的變更(changeset),然后執(zhí)行日志文件中的修改,將數(shù)據(jù)庫更新或回滾(rollback)到一致的狀態(tài),本文主要介紹SpringBoot與Liquibase的集成,需要的朋友可以參考下

簡介

Liquibase是一個用于用于跟蹤、管理和應(yīng)用數(shù)據(jù)庫變化的開源工具,通過日志文件(changelog)的形式記錄數(shù)據(jù)庫的變更(changeset),然后執(zhí)行日志文件中的修改,將數(shù)據(jù)庫更新或回滾(rollback)到一致的狀態(tài)。它的目標是提供一種數(shù)據(jù)庫類型無關(guān)的解決方案,通過執(zhí)行schema類型的文件來達到遷移。本文主要介紹SpringBoot與Liquibase的集成。

優(yōu)點

  • 支持幾乎所有主流的數(shù)據(jù)庫,目前支持包括 Oracle/Sql Server/DB2/MySql/Sybase/PostgreSQL等 各種數(shù)據(jù)庫,這樣在數(shù)據(jù)庫的部署和升級環(huán)節(jié)可幫助應(yīng)用系統(tǒng)支持多數(shù)據(jù)庫;
  • 支持版本控制,這樣就能支持多開發(fā)者的協(xié)作維護;
  • 日志文件支持多種格式,如XML, YAML, JSON, SQL等;
  • 提供變化應(yīng)用的回滾功能,可按時間、數(shù)量或標簽(tag)回滾已應(yīng)用的變化。通過這種方式,開發(fā)人員可輕易的還原數(shù)據(jù)庫在任何時間點的狀態(tài);
  • 支持多種運行方式,如命令行、Spring集成、Maven插件、Gradle插件等。

簡單示例

這里主要介紹基于SpringBoot集成liquibase來管理數(shù)據(jù)庫的變更。

POM依賴

Maven 包的依賴,主要包含mysql驅(qū)動, JDBC(這里spring-boot-starter-data-jpa包含了jdbc包,當然直接引入jdbc包也行),以及l(fā)iquibase包。

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.28</version>
</dependency>
<dependency>
    <groupId>com.github.wenhao</groupId>
    <artifactId>jpa-spec</artifactId>
    <version>3.1.0</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
    <version>4.9.1</version>
</dependency>

yml配置

SpringBoot AutoConfig默認已經(jīng)包含了對liquibase的配置,在spring.liquibase配置下。
基礎(chǔ)的配置,可以直接使用如下(主要是指定change-log的位置,默認的位置是classpath:/db/changelog/db.changelog-master.yaml):

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test_db_liquibase?useSSL=false&autoReconnect=true&characterEncoding=utf8
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: bfXa4Pt2lUUScy8jakXf
  liquibase:
    enabled: true
    # 如下配置是被spring.datasource賦值的,所以可以不配置
#    url: jdbc:mysql://localhost:3306/test_db_liquibase?useSSL=false&autoReconnect=true&characterEncoding=utf8
#    user: root
#    password: bfXa4Pt2lUUScy8jakXf
    change-log: classpath:/db/changelog/db.changelog-master.yaml

新增changelog

XML方式固然OK,不過依然推薦使用yml格式。

databaseChangeLog:
  - changeSet:
      id: 20220412-01
      author: pdai
      changes:
        - createTable:
            tableName: person
            columns:
              - column:
                  name: id
                  type: int
                  autoIncrement: true
                  constraints:
                    primaryKey: true
                    nullable: false
              - column:
                  name: firstname
                  type: varchar(50)
              - column:
                  name: lastname
                  type: varchar(50)
                  constraints:
                    nullable: false
              - column:
                  name: state
                  type: char(2)

  - changeSet:
      id: 20220412-02
      author: pdai
      changes:
        - addColumn:
            tableName: person
            columns:
              - column:
                  name: username
                  type: varchar(8)

  - changeSet:
      id: 20220412-03
      author: pdai
      changes:
        - addLookupTable:
            existingTableName: person
            existingColumnName: state
            newTableName: state
            newColumnName: id
            newColumnDataType: char(2)

測試

啟動springBootApplication, 我們可以看到如下的幾個changeSet被依次執(zhí)行

2022-04-12 20:41:20.591  INFO 8476 --- [           main] liquibase.lockservice                    : Successfully acquired change log lock
2022-04-12 20:41:20.737  INFO 8476 --- [           main] liquibase.changelog                      : Creating database history table with name: test_db_liquibase.DATABASECHANGELOG
2022-04-12 20:41:20.783  INFO 8476 --- [           main] liquibase.changelog                      : Reading from test_db_liquibase.DATABASECHANGELOG
Running Changeset: classpath:/db/changelog/db.changelog-master.yaml::20220412-01::pdai
2022-04-12 20:41:20.914  INFO 8476 --- [           main] liquibase.changelog                      : Table person created
2022-04-12 20:41:20.914  INFO 8476 --- [           main] liquibase.changelog                      : ChangeSet classpath:/db/changelog/db.changelog-master.yaml::20220412-01::pdai ran successfully in 53ms
Running Changeset: classpath:/db/changelog/db.changelog-master.yaml::20220412-02::pdai
2022-04-12 20:41:20.952  INFO 8476 --- [           main] liquibase.changelog                      : Columns username(varchar(8)) added to person
2022-04-12 20:41:20.952  INFO 8476 --- [           main] liquibase.changelog                      : ChangeSet classpath:/db/changelog/db.changelog-master.yaml::20220412-02::pdai ran successfully in 31ms
Running Changeset: classpath:/db/changelog/db.changelog-master.yaml::20220412-03::pdai
2022-04-12 20:41:21.351  INFO 8476 --- [           main] liquibase.changelog                      : Lookup table added for person.state
2022-04-12 20:41:21.351  INFO 8476 --- [           main] liquibase.changelog                      : ChangeSet classpath:/db/changelog/db.changelog-master.yaml::20220412-03::pdai ran successfully in 389ms
2022-04-12 20:41:21.382  INFO 8476 --- [           main] liquibase.lockservice                    : Successfully released change log lock

查看數(shù)據(jù)庫,你會發(fā)現(xiàn)數(shù)據(jù)已經(jīng)變更

那我們?nèi)绻匦聠舆@個SpringBootApplication,會怎么呢?

很顯然,因為databasechangelog表中已經(jīng)有相關(guān)執(zhí)行記錄了,所以將不再執(zhí)行變更

2022-04-12 20:49:01.566  INFO 9144 --- [           main] liquibase.lockservice                    : Successfully acquired change log lock
2022-04-12 20:49:01.761  INFO 9144 --- [           main] liquibase.changelog                      : Reading from test_db_liquibase.DATABASECHANGELOG
2022-04-12 20:49:01.812  INFO 9144 --- [           main] liquibase.lockservice                    : Successfully released change log lock

## 進一步理解

###  比較好的changelog的實踐
簡單而言:yml格式 + sql-file方式

執(zhí)行sqlFile格式的changeSet,如下
![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/857a01879d394aa2a4e920c25cc069e2.png)
執(zhí)行的日志如下

```log
2022-04-12 21:00:28.198  INFO 17540 --- [           main] liquibase.lockservice                    : Successfully acquired change log lock
2022-04-12 21:00:28.398  INFO 17540 --- [           main] liquibase.changelog                      : Reading from test_db_liquibase.DATABASECHANGELOG
Running Changeset: classpath:/db/changelog/db.changelog-master.yaml::20220412-04::pdai
2022-04-12 21:00:28.516  INFO 17540 --- [           main] liquibase.changelog                      : SQL in file classpath:/db/changelog/db.changelog-20220412-04.sql executed
2022-04-12 21:00:28.516  INFO 17540 --- [           main] liquibase.changelog                      : ChangeSet classpath:/db/changelog/db.changelog-master.yaml::20220412-04::pdai ran successfully in 83ms
2022-04-12 21:00:28.532  INFO 17540 --- [           main] liquibase.lockservice                    : Successfully released change log lock

執(zhí)行后,查看變更記錄

數(shù)據(jù)表user表已經(jīng)創(chuàng)建并插入一條數(shù)據(jù)

以上就是SpringBoot整合Liquibase實現(xiàn)對數(shù)據(jù)庫管理和遷移的詳細內(nèi)容,更多關(guān)于SpringBoot Liquibase數(shù)據(jù)庫管理和遷移的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中JWT的使用的詳細教程

    Java中JWT的使用的詳細教程

    JWT的本質(zhì)就是一個字符串,它是將用戶信息保存到一個Json字符串中,然后進行編碼后得到一個JWT token,并且這個JWT token帶有簽名信息,接收后可以校驗是否被篡改,所以可以用于在各方之間安全地將信息作為Json對象傳輸,本文介紹了Java中JWT的使用,需要的朋友可以參考下
    2023-02-02
  • Intellij IDEA菜單欄不見了(Main Menu as Separate Toolbar)恢復菜單欄顯示的解決辦法

    Intellij IDEA菜單欄不見了(Main Menu as Separat

    有人問博主,關(guān)于Intellij IDEA菜單欄找不到了,被不小心的操作給隱藏了,怎么辦?下面給大家分享解決方案,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • 詳解Spring與MyBatis的整合的方法

    詳解Spring與MyBatis的整合的方法

    這篇文章主要為大家詳細介紹了Spring與MyBatis的整合,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 一篇文章帶你入門Java基本概念

    一篇文章帶你入門Java基本概念

    本文主要介紹了Java編程的基本概念基本概念,可以幫助我們更加深刻的所要講解的Java命令,具有很好的參考價值。下面跟著小編一起來看下吧,希望能給你帶來幫助
    2021-08-08
  • RabbitMQ中的延遲隊列機制詳解

    RabbitMQ中的延遲隊列機制詳解

    這篇文章主要介紹了RabbitMQ中的延遲隊列機制詳解,延時隊列內(nèi)部是有序的,最重要的特性就體現(xiàn)在它的延時屬性上,延時隊列中的元素是希望,在指定時間到了以后或之前取出和處理,簡單來說,延時隊列就是用來存放需要在指定時間被處理的元素的隊列,需要的朋友可以參考下
    2023-09-09
  • Java源碼解析之SortedMap和NavigableMap

    Java源碼解析之SortedMap和NavigableMap

    今天帶大家來學習Java SortedMap和NavigableMap,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • SpringBoot上傳文件到本服務(wù)器 目錄與jar包同級問題

    SpringBoot上傳文件到本服務(wù)器 目錄與jar包同級問題

    這篇文章主要介紹了SpringBoot上傳文件到本服務(wù)器 目錄與jar包同級問題,需要的朋友可以參考下
    2018-11-11
  • Java中spring boot 字符串判斷是否為空方法小結(jié)

    Java中spring boot 字符串判斷是否為空方法小結(jié)

    這篇文章主要介紹了Java中spring boot字符串判斷是否為空,通過安裝依賴,結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • Java Cache詳解及簡單實現(xiàn)

    Java Cache詳解及簡單實現(xiàn)

    這篇文章主要介紹了 Java Cache詳解及簡單實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 深入學習JavaWeb中監(jiān)聽器(Listener)的使用方法

    深入學習JavaWeb中監(jiān)聽器(Listener)的使用方法

    這篇文章主要為大家詳細介紹了深入學習JavaWeb中監(jiān)聽器(Listener)的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09

最新評論

波密县| 吴忠市| 开原市| 曲松县| 寿光市| 鄂伦春自治旗| 潮安县| 无极县| 互助| 南通市| 抚远县| 锡林郭勒盟| 高州市| 哈密市| 缙云县| 互助| 延长县| 蒲城县| 平武县| 连江县| 阜平县| 石景山区| 治县。| 灵宝市| 交城县| 盐津县| 海丰县| 遂川县| 娄烦县| 东莞市| 和林格尔县| 湟中县| 万山特区| 万年县| 德令哈市| 元氏县| 洛宁县| 龙井市| 榕江县| 彭阳县| 河曲县|