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

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

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

簡介

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

優(yōu)點

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

簡單示例

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

POM依賴

Maven 包的依賴,主要包含mysql驅動, 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配置下。
基礎的配置,可以直接使用如下(主要是指定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)有相關執(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)容,更多關于SpringBoot Liquibase數(shù)據(jù)庫管理和遷移的資料請關注腳本之家其它相關文章!

相關文章

最新評論