The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

Uso de Liquibase MongoDB

Liquibase es una herramienta de código abierto para la gestión de cambios en los esquemas de las bases de datos, permite gestionar las bases de datos MongoDB a través de su extensión MongoDB.

Quarkus proporciona un soporte de primera clase para el uso de Liquibase MongoDB Extension como se explicará en esta guía.

Solución

Le recomendamos que siga las instrucciones de las siguientes secciones y cree la aplicación paso a paso. Sin embargo, puede ir directamente al ejemplo completado.

Clone el repositorio Git: git clone https://github.com/quarkusio/quarkus-quickstarts.git o descargue un archivo.

La solución se encuentra en liquibase-mongodb-quickstart directorio.

Configuración del soporte para Liquibase

Para empezar a utilizar la extensión Liquibase MongoDB con su proyecto, sólo tiene que:

  • añada su changeLog al archivo src/main/resources/db/changeLog.xml como suele hacer con Liquibase

  • active la opción migrate-at-start para migrar el esquema automáticamente o inyecte el objeto Liquibase y ejecute su migración como lo hace normalmente.

En su pom.xml, añada las siguientes dependencias:

  • la extensión Liquibase MongoDB

  • la extensión del cliente de MongoDB

pom.xml
<!-- 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>
build.gradle
// Liquibase MongoDB
implementation("io.quarkus:quarkus-liquibase-mongodb")

// MongoDB client dependency
implementation("io.quarkus:quarkus-mongodb-client")

El soporte de la extensión de Liquibase MongoDB depende de la configuración del cliente Quarkus MongoDB. Por el momento, no soporta múltiples clientes. En primer lugar, es necesario añadir la configuración de MongoDB al archivo application.properties para permitir que Liquibase gestione el esquema.

El siguiente es un ejemplo para el archivo 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

Añade un archivo changeLog a la carpeta por defecto siguiendo las convenciones de nomenclatura de Liquibase: src/main/resources/db/changeLog.xml Los formatos YAML, JSON y XML son compatibles con el changeLog.

<?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>

Ahora puedes iniciar tu aplicación y Quarkus ejecutará el método de actualización de Liquibase según tu configuración.

Uso del objeto Liquibase

En caso de que esté interesado en utilizar el objeto Liquibase directamente, puede inyectarlo de la siguiente manera:

Si habilitó la propiedad quarkus.liquibase.migrate-at-start, cuando utilice la instancia de Liquibase, Quarkus ya habrá ejecutado la operación de migración.
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 Inyectar el objeto LiquibaseFactory
2 Utilizar directamente la instancia de Liquibase
3 Lista de los ChangeSets de liquibase aplicados o no aplicados

Referencia de configuración

Configuration property fixed at build time - All other configuration properties are overridable at runtime

Configuration property

Type

Default

The change log file

Environment variable: QUARKUS_LIQUIBASE_MONGODB_CHANGE_LOG

string

db/changeLog.xml

The migrate at start flag

Environment variable: QUARKUS_LIQUIBASE_MONGODB_MIGRATE_AT_START

boolean

false

The validate on update flag

Environment variable: QUARKUS_LIQUIBASE_MONGODB_VALIDATE_ON_MIGRATE

boolean

true

The clean at start flag

Environment variable: QUARKUS_LIQUIBASE_MONGODB_CLEAN_AT_START

boolean

false

The list of contexts

Environment variable: QUARKUS_LIQUIBASE_MONGODB_CONTEXTS

list of string

The list of labels

Environment variable: QUARKUS_LIQUIBASE_MONGODB_LABELS

list of string

The default catalog name

Environment variable: QUARKUS_LIQUIBASE_MONGODB_DEFAULT_CATALOG_NAME

string

The default schema name

Environment variable: QUARKUS_LIQUIBASE_MONGODB_DEFAULT_SCHEMA_NAME

string

The liquibase tables catalog name

Environment variable: QUARKUS_LIQUIBASE_MONGODB_LIQUIBASE_CATALOG_NAME

string

The liquibase tables schema name

Environment variable: QUARKUS_LIQUIBASE_MONGODB_LIQUIBASE_SCHEMA_NAME

string

The liquibase tables tablespace name

Environment variable: QUARKUS_LIQUIBASE_MONGODB_LIQUIBASE_TABLESPACE_NAME

string

The parameters to be passed to the changelog. Defined as key value pairs.

Environment variable: QUARKUS_LIQUIBASE_MONGODB_CHANGE_LOG_PARAMETERS

Map<String,String>