W moim bieżącym projekcie istnieje zespół DB, który sprawdza wszystkie skrypty przed zastosowaniem ich do produkcji.Liquibase - generuj skrypt bez stosowania zestawów zmian do bazy danych
Używamy Liquibase do zastosowania zestawów zmian do rozwoju, ale do produkcji musimy być w stanie wygenerować plik * .sql ze wszystkimi instrukcjami.
Zgodnie z dokumentacją wtyczki typu physibase-maven, updateSQL powinien być tym, czego chcę: http://www.liquibase.org/documentation/maven/maven_updatesql.html.
Więc stworzyłem dwa profile maven. Jeden do zastosowania zmian w lokalnej bazie danych programowania (za pomocą liquibase: update) i jednej innej, która po prostu wygeneruje skrypt. Problem polega na tym, że: doing liquibase: updateSQL generuje plik * .sql (zgodnie z oczekiwaniami), ale próbuje także połączyć się z bazą danych i zastosować zmiany (nieoczekiwane). Wierzę, że dokumentacja updateSQL prowadzi do błędu, jak mówi:
Generuje SQL, które są wymagane w celu aktualizacji bazy danych do aktualnej wersji, jak określono w DatabaseChangeLogs.
Nie wspomina o tym, że faktycznie zastosowałby zestawy zmian, takie jak liquibase: update does.
Możliwe, że nie rozumiem dokumentacji tutaj, ale nie powinienem aktualizowaćSQL generować sql lub powinien on rzeczywiście zaktualizować + wygenerować sql?
Oto moja konfiguracja wtyczki:
<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>
I utworzeniu profili lubi to:
<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>
Biorąc pod uwagę mój Maven config i moje zrozumienie, ja spodziewałbym
mvn install -P uat
do generuje tylko skrypt i nie próbuje połączyć się z bazą danych.
Fakt, że jestem zmuszony do określania właściwości db (sterownika itp.) Sprawia, że wierzę, że ma to na celu zawsze zmienić bazę danych, ale przypuszczam, że powinno być możliwe wygenerowanie skryptu bez próby zastosowania zmian baza danych.
Jakieś myśli? Czy to możliwe, ale jestem na złej drodze? A może brakuje mi jakiejś prostej własności? Lub po prostu nie jest w ogóle obsługiwany?
Z góry dziękuję.
Mieliśmy tylko czas, aby ponownie się temu przyjrzeć. Głupie mnie, to ma sens! Dzięki – redwulf
Uwaga: Jeśli nie chcesz żadnej interakcji z bazą danych, jest teraz tryb offline http://www.liquibase.org/documentation/offline.html –