Liquibase - Skript generieren, ohne änderungen zu der Datenbank

In meinem aktuellen Projekt gibt es ein DB-team, das prüft, ob alle Skripte, bevor Sie Sie in Produktion.

Sind wir mit Liquibase zu, gelten die änderungen für Entwicklung, sondern für die Produktion, wir müssen in der Lage sein zum generieren einer *.sql-Datei mit allen Anweisungen.

Laut der Dokumentation von liquibase-maven-plugin, Sie "UPDATESQL" sein sollte, was ich will: http://www.liquibase.org/documentation/maven/maven_updatesql.html.

Also ich habe zwei maven-profile. Eine Anwendung änderungen an der lokalen Entwicklung-Datenbank (mit liquibase:update) und eine andere, die würde nur generiert das Skript. Das problem ist: tun liquibase:Sie "UPDATESQL" erzeugt die *.sql-Datei (wie erwartet), aber er versucht auch zu verbinden mit der Datenbank und die änderungen zu übernehmen (auch nicht erwartet). Ich glaube, die Dokumentation für Sie "UPDATESQL" führt in die Irre, wie es heißt:

Generiert die SQL, die erforderlich ist, um die Datenbank zu aktualisieren, um die
aktuelle version wie angegeben, in der DatabaseChangeLogs.

Macht keine Erwähnung überhaupt, es würde tatsächlich gelten die änderungen, wie liquibase:update macht.

Ich kann missunderstanding die Dokumentation hier, aber sollte nicht Sie "UPDATESQL" nur generieren der sql-oder sollte es tatsächlich "update" + sql generieren?

Hier mein plugin-Konfiguration:

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

Und ich habe die profile mag dieses:

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

Mein maven config und mein Verständnis, würde ich erwarten, dass

mvn install -P uat

nur zu erzeugen, das Skript und nicht versucht eine Verbindung zur Datenbank herstellen.

Die Tatsache, dass ich dazu gezwungen werde, angeben, db-Eigenschaften (Treiber, etc) lässt mich glauben, dass dies ist beabsichtigt, um immer die Datenbank ändern, aber ich nehme an, es sollte möglich sein, nur generiert das Skript ohne zu versuchen, um änderungen zu übernehmen, die für eine Datenbank.

Irgendwelche Gedanken? Ist es möglich, aber ich bin völlig im falschen Pfad? Oder ich bin fehlen einige einfache Eigenschaft? Oder es ist einfach gar nicht unterstützt?

Vielen Dank im Voraus.

InformationsquelleAutor redwulf | 2014-04-08
Schreibe einen Kommentar