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>