tutorial tag mvn español curso column maven multiple-databases liquibase

tag - liquibase utilizando maven con dos bases de datos no funciona



liquibase tutorial español (1)

Esta publicación describe cómo actualizar dos bases de datos de maven usando liquibase: liquibase usando maven con dos bases de datos Sin embargo, cuando intento exactamente la misma configuración en mi pom.xml (incluido a continuación), no funciona. Me aparece este error cuando ejecuto ''mvn liquibase: update'':

The driver has not been specified either as a parameter or in a properties file.

Corriendo con verbose set a true obtengo:

[INFO] Settings---------------------------- [INFO] driver: null [INFO] url: null [INFO] username: null [INFO] password: null

así que parece que la configuración no se está pasando a liquibase. Si la parte de configuración está fuera de las ejecuciones , funciona, pero eso frustra la idea de tener múltiples ejecuciones; querrá usar configuraciones diferentes para diferentes ejecuciones.

<plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-plugin</artifactId> <version>1.9.5.0</version> <executions> <execution> <phase>process-resources</phase> <id>one</id> <goals> <goal>update</goal> </goals> <configuration> <changeLogFile>src/main/resources/liquibase/changelog-master.xml</changeLogFile> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:mysql://127.0.0.1:3306/${database.development}</url> <username>wifi_offload_app</username> <password /> <dropFirst>${liquibase.dropFirst}</dropFirst> </configuration> </execution> <execution> <phase>process-resources</phase> <id>two</id> <goals> <goal>update</goal> </goals> <configuration> <changeLogFile>src/main/resources/liquibase/changelog-master-sbr.xml</changeLogFile> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:mysql://127.0.0.1:3307/${database.development.sbr}</url> <username>wifi_offload_app</username> <password /> <dropFirst>${liquibase.dropFirst}</dropFirst> </configuration> </execution> </executions> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.12</version> </dependency> </dependencies> </plugin>

Gracias, Hari

Actualice después de probar ''mvn process-resources'' del comentario de Mark. Aquí está el resultado de mvn actualizando ambas bases de datos.

[hariharan@msg9]$ mvn process-resources [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building Offload Manager Service [INFO] task-segment: [process-resources] [INFO] ------------------------------------------------------------------------ [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 12 resources [INFO] [liquibase:update {execution: one}] [INFO] ------------------------------------------------------------------------ [INFO] Executing on Database: jdbc:mysql://127.0.0.1:3306/db1 Mar 7, 2012 4:11:47 PM liquibase.database.template.JdbcTemplate comment INFO: Create Database Lock Table Mar 7, 2012 4:11:47 PM liquibase.database.template.JdbcTemplate comment INFO: Lock Database Mar 7, 2012 4:11:47 PM liquibase.lock.LockHandler acquireLock INFO: Successfully acquired change log lock Mar 7, 2012 4:11:47 PM liquibase.database.template.JdbcTemplate comment INFO: Create Database Change Log Table Mar 7, 2012 4:11:47 PM liquibase.database.AbstractDatabase checkDatabaseChangeLogTable INFO: Creating database history table with name: `DATABASECHANGELOG` Mar 7, 2012 4:11:48 PM liquibase.database.AbstractDatabase getRanChangeSetList INFO: Reading from `DATABASECHANGELOG` Mar 7, 2012 4:11:48 PM liquibase.database.template.JdbcTemplate comment INFO: Changeset liquibase/changelogs/1328053095_tables.xml::1328053095-1::hariharan::(MD5Sum: bf33ef8ba7352e8c0864e9457ee642b) Mar 7, 2012 4:11:49 PM liquibase.database.template.JdbcTemplate comment INFO: Changeset liquibase/changelogs/1328053095_tables.xml::1328053095-2::hariharan::(MD5Sum: 7cc4f84be549dbcea3589d85df3e059) Mar 7, 2012 4:11:50 PM liquibase.database.template.JdbcTemplate comment INFO: Changeset liquibase/changelogs/1328053095_tables.xml::1328053095-3::hariharan::(MD5Sum: 59821447f5744410a1c36bccd16196f6) Mar 7, 2012 4:11:50 PM liquibase.database.template.JdbcTemplate comment INFO: Release Database Lock Mar 7, 2012 4:11:50 PM liquibase.lock.LockHandler releaseLock INFO: Successfully released change log lock Mar 7, 2012 4:11:50 PM liquibase.database.template.JdbcTemplate comment INFO: Release Database Lock Mar 7, 2012 4:11:50 PM liquibase.lock.LockHandler releaseLock INFO: Successfully released change log lock [INFO] ------------------------------------------------------------------------ [INFO] [INFO] [liquibase:update {execution: two}] [INFO] ------------------------------------------------------------------------ [INFO] Executing on Database: jdbc:mysql://127.0.0.1:3307/db2 Mar 7, 2012 4:11:50 PM liquibase.database.template.JdbcTemplate comment INFO: Create Database Lock Table Mar 7, 2012 4:11:50 PM liquibase.database.template.JdbcTemplate comment INFO: Lock Database Mar 7, 2012 4:11:50 PM liquibase.lock.LockHandler acquireLock INFO: Successfully acquired change log lock Mar 7, 2012 4:11:50 PM liquibase.database.template.JdbcTemplate comment INFO: Create Database Change Log Table Mar 7, 2012 4:11:50 PM liquibase.database.AbstractDatabase checkDatabaseChangeLogTable INFO: Creating database history table with name: `DATABASECHANGELOG` Mar 7, 2012 4:11:50 PM liquibase.database.AbstractDatabase getRanChangeSetList INFO: Reading from `DATABASECHANGELOG` Mar 7, 2012 4:11:50 PM liquibase.database.template.JdbcTemplate comment INFO: Changeset liquibase/changelogs-sbr/1330991147_tables.xml::1330991147-1::hariharan::(MD5Sum: 8cf69599bcf338b57d7fe1ecc1471d86) Mar 7, 2012 4:11:50 PM liquibase.database.template.JdbcTemplate comment INFO: Changeset liquibase/changelogs-sbr/1330991147_tables.xml::1330991147-2::hariharan::(MD5Sum: cf9a9717987fda5deba07a7a943673e1) Mar 7, 2012 4:11:50 PM liquibase.database.template.JdbcTemplate comment INFO: Release Database Lock Mar 7, 2012 4:11:50 PM liquibase.lock.LockHandler releaseLock INFO: Successfully released change log lock Mar 7, 2012 4:11:50 PM liquibase.database.template.JdbcTemplate comment INFO: Release Database Lock Mar 7, 2012 4:11:50 PM liquibase.lock.LockHandler releaseLock INFO: Successfully released change log lock [INFO] ------------------------------------------------------------------------ [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6 seconds [INFO] Finished at: Wed Mar 07 16:11:50 PST 2012 [INFO] Final Memory: 23M/180M [INFO] ------------------------------------------------------------------------


¿Su compilación necesita actualizar 2 bases de datos de una vez? Un enfoque alternativo es usar los perfiles de Maven de la siguiente manera:

mvn process-resources mvn -Pdb2 process-resources

Archivos de proyecto

|-- pom.xml `-- src `-- main `-- resources |-- com | `-- myspotontheweb | `-- db | `-- changelog | |-- db-changelog-1.0.xml | `-- db-changelog-master.xml `-- liquibase.properties

Prefiero usar la fase de generación de recursos de Maven para crear un archivo de propiedades liquibase.

pom.xml

Contiene dos perfiles al final que contienen las propiedades asociadas con las dos bases de datos. Esta solución se adapta a cualquier cantidad de entornos db.

Otro elemento importante es que liquibase usa las propiedades pobladas en el directorio de destinos

<project> <modelVersion>4.0.0</modelVersion> <groupId>com.myspotontheweb.db</groupId> <artifactId>liquibase-demo</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.3.162</version> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>2.0.1</version> <executions> <execution> <phase>process-resources</phase> <configuration> <propertyFile>target/classes/liquibase.properties</propertyFile> <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase> </configuration> <goals> <goal>update</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <profiles> <profile> <id>db1</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <liquibase.url>jdbc:h2:target/db1/liquibaseTest;AUTO_SERVER=TRUE</liquibase.url> <liquibase.driver>org.h2.Driver</liquibase.driver> <liquibase.username>user</liquibase.username> <liquibase.password>pass</liquibase.password> </properties> </profile> <profile> <id>db2</id> <properties> <liquibase.url>jdbc:h2:target/db2/liquibaseTest;AUTO_SERVER=TRUE</liquibase.url> <liquibase.driver>org.h2.Driver</liquibase.driver> <liquibase.username>user</liquibase.username> <liquibase.password>pass</liquibase.password> </properties> </profile> </profiles> </project>

liquibase.properties

Este es el archivo de plantilla rellenado con los valores de propiedades de perfil para el entorno específico.

# Database credentials url=${liquibase.url} driver=${liquibase.driver} username=${liquibase.username} password=${liquibase.password} # Liquibase changelog changeLogFile=com/myspotontheweb/db/changelog/db-changelog-master.xml

Actualizar

Y una estrategia alternativa sería ejecutar el complemento directamente, en lugar de integrarlo en un ciclo de vida de Maven.

mkdir target mvn liquibase:update mvn -Pdb2 liquibase:update

De nuevo, está utilizando un perfil para controlar la configuración de la propiedad.

pom.xml

La diferencia es que la configuración de los complementos está controlada por las propiedades establecidas en el perfil. No más archivos de propiedades creados en el directorio de destinos para su envío en su jar.

<project> <modelVersion>4.0.0</modelVersion> <groupId>com.myspotontheweb.db</groupId> <artifactId>liquibase-demo</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.3.162</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>2.0.1</version> <configuration> <url>${liquibase.url}</url> <driver>${liquibase.driver}</driver> <username>${liquibase.username}</username> <password>${liquibase.password}</password> <changeLogFile>src/main/resources/com/myspotontheweb/db/changelog/db-changelog-master.xml</changeLogFile> <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase> </configuration> </plugin> </plugins> </build> <profiles> <profile> <id>db1</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <liquibase.url>jdbc:h2:target/db1/liquibaseTest;AUTO_SERVER=TRUE</liquibase.url> <liquibase.driver>org.h2.Driver</liquibase.driver> <liquibase.username>user</liquibase.username> <liquibase.password>pass</liquibase.password> </properties> </profile> <profile> <id>db2</id> <properties> <liquibase.url>jdbc:h2:target/db2/liquibaseTest;AUTO_SERVER=TRUE</liquibase.url> <liquibase.driver>org.h2.Driver</liquibase.driver> <liquibase.username>user</liquibase.username> <liquibase.password>pass</liquibase.password> </properties> </profile> </profiles> </project>