2014-04-08 16 views
7

Nel mio progetto corrente, c'è un team di DB che controlla tutti gli script prima di applicarli alla produzione.Liquibase - genera script senza applicare changeset al database

Usiamo Liquibase per applicare i changeset allo sviluppo, ma per la produzione, dobbiamo essere in grado di generare un file * .sql con tutte le istruzioni.

Secondo la documentazione di liquibase-maven-plugin, updateSQL dovrebbe essere quello che voglio: http://www.liquibase.org/documentation/maven/maven_updatesql.html.

Così ho creato due profili Maven. Uno per applicare le modifiche al database di sviluppo locale (usando liquibase: aggiornamento) e un altro che avrebbe appena generato lo script. Il problema è: fare liquibase: updateSQL genera il file * .sql (come previsto), ma tenta anche di connettersi al database e applicare le modifiche (non previste). Credo che la documentazione per UpdateSQL conduce in errore, come si dice:

genera l'SQL che è necessario per aggiornare il database alla versione corrente come specificato nelle DatabaseChangeLogs.

Non fa alcun accenno a ciò che applicherebbe i changeset, come ad esempio il liquibase: l'aggiornamento lo fa.

Potrei essere in errore nella documentazione qui, ma non dovrebbe aggiornare SQL solo generare sql o dovrebbe effettivamente aggiornare + generare sql?

Ecco la mia configurazione del plugin:

<plugin> 
    <groupId>org.liquibase</groupId> 
    <artifactId>liquibase-maven-plugin</artifactId> 
    <version>3.0.5</version> 
    <configuration> 
     <changeLogFile>src/main/resources/db/liquibase_changeset.xml</changeLogFile> 
     <driver>oracle.jdbc.driver.OracleDriver</driver> 
     <url>${liquibase.db.url}</url> 
     <username>${liquibase.db.user}</username> 
     <password>${liquibase.db.password}</password> 
     <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>process-resources</phase> 
      <goals> 
       <goal>${liquibase.exec.goal}</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

e ho creato i profili piace questo:

<profiles> 
    <profile> 
     <id>local</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <liquibase.exec.goal>update</liquibase.exec.goal> 
      <liquibase.exec.prompt>false</liquibase.exec.prompt> 
      <liquibase.db.url>jdbc:oracle:thin:@host:1521:xe</liquibase.db.url> 
      <liquibase.db.user>user</liquibase.db.user> 
      <liquibase.db.password>password</liquibase.db.password> 
     </properties> 
    </profile> 

    <profile> 
     <id>uat</id> 
     <properties> 
      <liquibase.exec.goal>updateSQL</liquibase.exec.goal> 
      <liquibase.exec.prompt>true</liquibase.exec.prompt> 
      <liquibase.db.url>jdbc:oracle:thin:@host2:1521:xe</liquibase.db.url> 
      <liquibase.db.user>user2</liquibase.db.user> 
      <liquibase.db.password>password2</liquibase.db.password> 
     </properties> 
    </profile> 
</profiles> 

Data la mia Maven config e la mia comprensione, mi sarei aspettato

mvn install -P uat 

a solo generare lo script e non provare a connettersi al database.

Il fatto che sono costretto a specificare le proprietà del db (driver, ecc.) Mi fa pensare che questo sia destinato a cambiare sempre il database, ma suppongo che dovrebbe essere possibile generare lo script senza tentare di applicare le modifiche un database.

Qualche idea? È possibile ma sono completamente sulla strada sbagliata? O mi manca qualche proprietà semplice? O semplicemente non è supportato affatto?

Grazie in anticipo.

risposta

8

UpdateSQL non aggiorna il database, ma emette solo SQL.

Il motivo per cui ha bisogno delle informazioni di connessione al database e crea una connessione effettiva perché è necessario selezionare dalla tabella databasechangelog per determinare quali set di modifiche sono stati eseguiti e quali no.

+0

Ho avuto solo il tempo di esaminarlo di nuovo oggi. Sciocco, questo ha molto senso! Grazie – redwulf

+1

Nota: se non si desidera alcuna interazione con il database, è ora disponibile la modalità offline http://www.liquibase.org/documentation/offline.html –

Problemi correlati