Liquibase MongoDBの使用
Liquibaseは、データベースのスキーマ変更管理のためのオープンソースのツールで、 MongoDB エクステンションを通じて、MongoDB データベースを管理できます。
Quarkusは、このガイドで説明されるように、Liquibase MongoDB エクステンションを使用するためのファーストクラスのサポートを提供します。
ソリューション
次のセクションの指示に従って、段階的にアプリケーションを作成していくことをお勧めします。ただし、完成した例にすぐにアクセスすることもできます。
Gitリポジトリをクローンする: git clone https://github.com/quarkusio/quarkus-quickstarts.git
、または archive をダウンロードする。
ソリューションは、 liquibase-mongodb-quickstart
ディレクトリにあります。
Liquibaseのサポートをセットアップする
Liquibase MongoDB エクステンションをあなたのプロジェクトで使い始めるには、以下が必要です。
-
Liquibase で通常行っているように、changeLog を
src/main/resources/db/changeLog.xml
ファイルに追加します。 -
migrate-at-start
オプションを有効にしてスキーマを自動的にマイグレーションするか、Liquibase
オブジェクトを注入して通常通りマイグレーションを実行します。
pom.xml
で、以下の依存関係を追加します:
-
Liquibase MongoDB エクステンション
-
MongoDBクライアントエクステンション
<!-- Liquibase MongoDB -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-liquibase-mongodb</artifactId>
</dependency>
<!-- MongoDB client dependency -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-mongodb-client</artifactId>
</dependency>
// Liquibase MongoDB
implementation("io.quarkus:quarkus-liquibase-mongodb")
// MongoDB client dependency
implementation("io.quarkus:quarkus-mongodb-client")
LiquibaseのMongoDBエクステンションサポートは、QuarkusのMongoDBクライアント設定に依存しています。今のところ、複数のクライアントには対応していません。まず、Liquibase がスキーマを管理できるようにするために、MongoDB config を application.properties
ファイルに追加する必要があります。
以下は、 application.properties
ファイルの例です。
# configure MongoDB
quarkus.mongodb.connection-string = mongodb://localhost:27017
# Liquibase MongoDB minimal config properties
quarkus.liquibase-mongodb.migrate-at-start=true
# Liquibase MongoDB optional config properties
# quarkus.liquibase-mongodb.change-log=db/changeLog.xml
# quarkus.liquibase-mongodb.validate-on-migrate=true
# quarkus.liquibase-mongodb.clean-at-start=false
# quarkus.liquibase-mongodb.contexts=Context1,Context2
# quarkus.liquibase-mongodb.labels=Label1,Label2
# quarkus.liquibase-mongodb.default-catalog-name=DefaultCatalog
# quarkus.liquibase-mongodb.default-schema-name=DefaultSchema
Liquibase の命名規則に従って、デフォルトフォルダに変更ログファイルを追加します: src/main/resources/db/changeLog.xml
変更ログは、YAML、JSON、XML 形式がサポートされています。
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext https://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
<changeSet id="1" author="loic">
<ext:createCollection collectionName="Fruit"/>
<ext:createIndex collectionName="Fruit">
<ext:keys>{color: 1}</ext:keys>
<ext:options>{name: "colorIdx"}</ext:options>
</ext:createIndex>
<ext:insertOne collectionName="Fruit">
<ext:document>{"name":"orange", "color": "orange"}</ext:document>
</ext:insertOne>
</changeSet>
</databaseChangeLog>
これで、アプリケーションを起動できるようになり、Quarkusは設定に従ってLiquibaseのアップデートメソッドを実行します。
Liquibaseオブジェクトの使用
Liquibase
オブジェクトを直接使用したい場合は、次のようにして注入します。
quarkus.liquibase.migrate-at-start プロパティを有効にした場合、Liquibase インスタンスを使用する時には、Quarkus はすでにマイグレーション操作を実行しています。
|
import io.quarkus.liquibase.LiquibaseFactory;
@ApplicationScoped
public class MigrationService {
// You can Inject the object if you want to use it manually
@Inject
LiquibaseMongodbFactory liquibaseMongodbFactory; (1)
public void checkMigration() {
// Use the liquibase instance manually
try (Liquibase liquibase = liquibaseFactory.createLiquibase()) {
liquibase.dropAll(); (2)
liquibase.validate();
liquibase.update(liquibaseFactory.createContexts(), liquibaseFactory.createLabels());
// Get the list of liquibase change set statuses
List<ChangeSetStatus> status = liquibase.getChangeSetStatuses(liquibaseFactory.createContexts(), liquibaseFactory.createLabels()); (3)
}
}
}
1 | LiquibaseFactory オブジェクトのインジェクション |
2 | Liquibaseのインスタンスの直接使用 |
3 | 適用された、または適用されていないliquibaseのChangeSetsのリスト |
設定リファレンス
ビルド時に固定される設定プロパティ - その他の設定プロパティはランタイムでオーバーライド可能です。
型 |
デフォルト |
|
---|---|---|
The change log file Environment variable: |
string |
|
The migrate at start flag Environment variable: |
boolean |
|
The validate on update flag Environment variable: |
boolean |
|
The clean at start flag Environment variable: |
boolean |
|
The list of contexts Environment variable: |
list of string |
|
The list of labels Environment variable: |
list of string |
|
The default catalog name Environment variable: |
string |
|
The default schema name Environment variable: |
string |
|
The liquibase tables catalog name Environment variable: |
string |
|
The liquibase tables schema name Environment variable: |
string |
|
The liquibase tables tablespace name Environment variable: |
string |
|
The parameters to be passed to the changelog. Defined as key value pairs. Environment variable: |
|