SpringBoot は Liquibase をどのように組み合わせてデータベース変更管理を実装しますか?

Spring Boot と Liquibase を組み合わせることで、データの一貫性とトレーサビリティを確保しながら、データベース変更管理のプロセスを簡素化できます。この記事では、Liquibase を Spring Boot アプリケーションに統合し、データベース変更管理を実装する方法を詳しく説明します。

注: この記事で使用されているサンプル コードは、Spring Boot 2.5.0 および Liquibase 4.3.5 バージョンに基づいています。

1. Liquibase の概要

Liquibase は、複数のデータベース (MySQL、Oracle、SQL Server など) をサポートするオープンソースのデータベース変更管理ツールであり、XML、YAML、または SQL 形式でデータベース変更スクリプトを定義できます。Liquibase はこれらのスクリプトを自動的に実行し、ロールバックやデータベース ステータスの比較などの後続の操作のために各変更の情報を記録できます。

2. 準備

2.1 Spring Boot プロジェクトの作成

まず、Spring Initializr を使用して簡単に初期化するか、手動で新しい Spring Boot プロジェクトを作成する必要があります。ここでは Spring Initializr が使用されます。

start.spring.io/ページを開き  、次のオプションを選択します。

  • プロジェクト:Mavenプロジェクト
  • 言語:Java
  • スプリングブーツ:2.5.0
  • 包装:瓶
  • ジャワ:11

[依存関係] タブで次の依存関係を検索して追加します。

  • スプリングウェブ
  • Spring Data JPA
  • H2 データベース
  • リキベース

完了したら、「生成」ボタンをクリックしてプロジェクト圧縮パッケージをダウンロードし、ローカルで解凍します。

2.2 Maven の構成

Liquibase Maven プラグインをプロジェクトのルート ディレクトリ内の pom.xml ファイルに追加します。

<plugins>
  <plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>4.3.5</version>
    <configuration>
      <propertyFile>src/main/resources/liquibase.properties</propertyFile>
    </configuration>
    <dependencies>
      <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
        <version>8.4.1.jre11</version>
      </dependency>
    </dependencies>
  </plugin>
</plugins>
复制代码

Liquibase の Maven プラグインは、変更スクリプトの生成、変更スクリプトの実行など、データベースの変更を管理するためのいくつかのコマンドを提供します。さらに、  mssql-jdbc SQL Server データベースの操作をサポートするために、Maven に依存関係を追加する必要もあります。

2.3 Liquibaseの構成

プロジェクト ディレクトリsrc/main/resources に という名前のファイルを作成し liquibase.properties 、Liquibase ランタイムのパラメータを設定します。具体的な設定は次のとおりです。

changeLogFile=src/main/resources/db/changelog/db.changelog-master.xml
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://localhost:1433;databaseName=my_database
username=sa
password=123456
复制代码

の:

  • changeLogFile: Liquibase 実行の変更ログ ファイルを指定します。
  • driver: データベースドライバーの種類を指定します
  • url:接続先のデータベースURLを指定します。
  • username: データベースに接続するときに使用するユーザー名を指定します
  • password: データベースに接続するときに使用するパスワードを指定します。

実際の状況に応じて、対応するパラメータを変更してください。

3. 変更スクリプトを作成する

 追加の変更ログ ファイルの場所を指定するディレクトリの下に、 src/main/resources/db/changelog という名前のファイルを作成します 。db.changelog-master.xmlLiquibase は、起動時にこれらのログ ファイルに定義された変更を自動的に検索して実行します。

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
                    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd">
  <include file="001-initial-schema.xml"/>
</databaseChangeLog>
复制代码

次に、特定のアクションを定義する変更スクリプトを作成する必要があります。

001-initial-schema.xml データベース スキーマを初期化するための操作を定義する という名前のファイルを作成します 。ファイルは src/main/resources/db/changelog ディレクトリの下にあります。コードは以下のように表示されます:

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
                    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd">
  <changeSet id="001" author="binjie09">
    <createTable tableName="person">
      <column name="id" type="bigint" autoIncrement="true">
        <constraints primaryKey="true" nullable="false"/>
      </column>
      <column name="name" type="varchar(255)">
        <constraints nullable="false"/>
      </column>
      <column name="age" type="integer"/>
    </createTable>
  </changeSet>
</databaseChangeLog>
复制代码

このスクリプトは 、 、person の 3 つのフィールドを持つ名前のテーブルを定義しますこのうち、 主キーは自動インクリメントフィールドとして設定されます。idnameageid

4. Spring Boot は Liquibase を統合します

次に、Liquibase を Spring Boot アプリケーションに統合する必要があります。src/main/java ディレクトリに という名前のパッケージを作成し 、  スタートアップ クラスという名前のファイルcom.example.demo を作成します 。DemoApplication.javaコードは以下のように表示されます:

@SpringBootApplication
public class DemoApplication {

  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }

}
复制代码

4.1 Liquibase プロパティの構成

src/main/resources/application.properties 次の設定をファイルに追加します。 

liquibase.change-log=classpath:/db/changelog-master.xml
复制代码

liquibase.properties この構成では、の changeLogFile プロパティに対応して、Liquibase が実行する変更ログ ファイルを指定します 。

4.2 実行時にスクリプトを自動的に実行する

Liquibase Maven プラグインをプロジェクトに追加したので、Maven コマンドを使用して Liquibase 操作を実行できます。しかし、この方法は手動で実行する必要があり、あまり便利ではありません。

ここで、コマンドを手動で実行することなく、Spring Boot が起動時にスクリプトを自動的にチェックして実行できるようにします。これを行うには、スタートアップ クラスに関連する構成を追加する必要があります。

DemoApplication.java ファイルを 変更して LiquibaseConfig クラスを追加します。

@Configuration
public class LiquibaseConfig {

  @Bean
  public SpringLiquibase liquibase(DataSource dataSource) {
    SpringLiquibase liquibase = new SpringLiquibase();
    liquibase.setDataSource(dataSource);
    liquibase.setChangeLog("classpath:/db/changelog-master.xml");
    return liquibase;
  }

}
复制代码

このクラスは、 SpringLiquibase クラスを使用して自動化された Liquibase 操作を構成します。

4.3 テスト

ここまでで、Spring Boot と Liquibase の統合が完了しました。これで、アプリを起動し、テスト コードを実行して、統合が成功したことを確認できます。

まず、 という名前のパッケージsrc/test/java を作成します com.example.demo 。次に、 DemoApplicationTests.java テスト コードの作成に使用する という名前のファイルを作成します。

@SpringBootTest
class DemoApplicationTests {

  @Autowired
  private JdbcTemplate jdbcTemplate;

  @Test
  void testCreateTable() {
    List<Map<String, Object>> result = jdbcTemplate.queryForList("SELECT * FROM person");
    Assert.assertEquals(0, result.size());
  }

}
复制代码

テスト コードは、  テーブル内のデータをJdbcTemplate クエリするために 使用します。personデータを追加していないため、期待される結果は空になるはずです。

テスト コードを実行し、エラーが報告されず、期待どおりの結果が出力されれば、統合は成功しています。ここで、他の変更スクリプトの作成に進み、Liquibase を使用してデータベースの変更を自動的に管理できます。

5. まとめ

この記事では、Spring Boot と Liquibase の統合方法を詳しく紹介し、読者の参考のために対応するサンプル コードを示します。もちろん、これは基本的な使用法のデモンストレーションにすぎず、実際のプロジェクトでは、複数のデータ ソース、マルチテナントなど、より複雑な要件に遭遇する可能性があります。この記事が読者に、Liquibase でデータベースの変更を管理するためのインスピレーションを提供できれば幸いです。

 

おすすめ

転載: blog.csdn.net/ww2651071028/article/details/130598585