亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

簡(jiǎn)介

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

優(yōu)點(diǎn)

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

簡(jiǎn)單示例

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

POM依賴(lài)

Maven 包的依賴(lài),主要包含mysql驅(qū)動(dòng), JDBC(這里spring-boot-starter-data-jpa包含了jdbc包,當(dāng)然直接引入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默認(rèn)已經(jīng)包含了對(duì)liquibase的配置,在spring.liquibase配置下。
基礎(chǔ)的配置,可以直接使用如下(主要是指定change-log的位置,默認(rèn)的位置是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,不過(guò)依然推薦使用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)

測(cè)試

啟動(dòng)springBootApplication, 我們可以看到如下的幾個(gè)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ù)庫(kù),你會(huì)發(fā)現(xiàn)數(shù)據(jù)已經(jīng)變更

那我們?nèi)绻匦聠?dòng)這個(gè)SpringBootApplication,會(huì)怎么呢?

很顯然,因?yàn)閐atabasechangelog表中已經(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

## 進(jìn)一步理解

###  比較好的changelog的實(shí)踐
簡(jiǎn)單而言: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實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)管理和遷移的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Liquibase數(shù)據(jù)庫(kù)管理和遷移的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 淺談Java對(duì)象禁止使用基本類(lèi)型

    淺談Java對(duì)象禁止使用基本類(lèi)型

    本文主要介紹了淺談Java對(duì)象禁止使用基本類(lèi)型,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • java web監(jiān)聽(tīng)器統(tǒng)計(jì)在線用戶(hù)及人數(shù)

    java web監(jiān)聽(tīng)器統(tǒng)計(jì)在線用戶(hù)及人數(shù)

    本文主要介紹了java web監(jiān)聽(tīng)器統(tǒng)計(jì)在線用戶(hù)及人數(shù)的方法解析。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • 淺談使用java實(shí)現(xiàn)阿里云消息隊(duì)列簡(jiǎn)單封裝

    淺談使用java實(shí)現(xiàn)阿里云消息隊(duì)列簡(jiǎn)單封裝

    這篇文章主要介紹了淺談使用java實(shí)現(xiàn)阿里云消息隊(duì)列簡(jiǎn)單封裝,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實(shí)現(xiàn)示例

    常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實(shí)現(xiàn)示例

    這篇文章主要介紹了常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實(shí)現(xiàn)示例,一般來(lái)說(shuō)DSA算法用于簽名的效率會(huì)比RSA要快,需要的朋友可以參考下
    2016-04-04
  • Springboot Maven打包跳過(guò)測(cè)試的五種方式小結(jié)

    Springboot Maven打包跳過(guò)測(cè)試的五種方式小結(jié)

    本文主要介紹了Springboot Maven打包跳過(guò)測(cè)試的五種方式小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • SpringMVC結(jié)合天氣api實(shí)現(xiàn)天氣查詢(xún)

    SpringMVC結(jié)合天氣api實(shí)現(xiàn)天氣查詢(xún)

    這篇文章主要為大家詳細(xì)介紹了SpringMVC結(jié)合天氣api實(shí)現(xiàn)天氣查詢(xún),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • java.lang.NullPointerException 如何處理空指針異常的實(shí)現(xiàn)

    java.lang.NullPointerException 如何處理空指針異常的實(shí)現(xiàn)

    這篇文章主要介紹了java.lang.NullPointerException 如何處理空指針異常的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java中Optional.of()方法及源碼解析(非常詳細(xì)!)

    Java中Optional.of()方法及源碼解析(非常詳細(xì)!)

    這篇文章主要給大家介紹了關(guān)于Java中Optional.of()方法及源碼解析的相關(guān)資料,Java中java.util .Optional類(lèi)的of()方法用于獲得該Optional類(lèi)中具有指定類(lèi)型的指定值的一個(gè)實(shí)例,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • idea安裝插件找不到的問(wèn)題及解決

    idea安裝插件找不到的問(wèn)題及解決

    這篇文章主要介紹了idea安裝插件找不到的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Spring?Boot?+?Mybatis?Plus實(shí)現(xiàn)樹(shù)狀菜單的方法

    Spring?Boot?+?Mybatis?Plus實(shí)現(xiàn)樹(shù)狀菜單的方法

    這篇文章主要介紹了Spring?Boot?+?Mybatis?Plus實(shí)現(xiàn)樹(shù)狀菜單,包括實(shí)體類(lèi)中添加子菜單列表和集合及構(gòu)建菜單樹(shù)的詳細(xì)代碼,代碼簡(jiǎn)單易懂,需要的朋友可以參考下
    2021-12-12

最新評(píng)論