2016-05-01 16 views
1

Ich habe ein Maven-basiertes Projekt, das Hibernate und Postgres (No Spring) verwendet.Verbindungsmaven mit Liquibase mit Winterschlaf?

Ich möchte Liquibase für Datenbankmigrationen verwenden. Idealerweise würde ich den folgenden Workflow mag:

  1. Ich schaffe das anfängliche „changeset“ (MVN liquibase: generateChangeLog), die angeblich die Datenbank zu initialisieren.

  2. Ich füge Entity-Klassen mit entsprechenden Anmerkungen hinzu. Ich erzeuge ein "diff" Änderungsset (mvn liquibase: diff?) Und überprüfe es in das Repository.

  3. Jetzt zieht jeder in meinem Team aus dem Repository und läuft etwas (mvn update?), Um ihre Kopie der Datenbank auf den neuesten Stand zu bringen.

  4. Ich wiederhole die vorherigen zwei Schritte wie gewünscht. Ich verstehe, dass Liquibase diese Art von Dev-Workflow unterstützen soll. Das Problem ist, gibt es viele bewegliche Teile, und ich bin zu kämpfen mit Dingen zusammen

zum Beispiel anschließen, wie konfiguriere ich das Liquibase, in Maven? in liquibase.properties? Wie gebe ich an, wo meine Changesets gespeichert werden sollen? Wie erstelle ich den ursprünglichen "Changeset"? Ich verstehe Changesets in verschiedenen Formaten (XML, JSON usw.), was sind die Vor- und Nachteile, können sie einfach in SQL sein?

Antwort

0

Es gibt ein Maven-Plugin für Liquibase, um dies durch mavenbasierte Lösung zu erreichen.

http://www.liquibase.org/documentation/maven/generated/update-mojo.html

Sie können dann Ihre Maven bauen mit Ziel liquibase laufen: update

wenn Sie zum Beispiel DB zu mysql verbinden möchten (liquibase viele verschiedene Datenbanken unterstützt)

<dependencies> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.6</version> 
     </dependency> 
    </dependencies> 





<build> 
    <plugins> 
     <plugin> 
      <groupId>org.liquibase</groupId> 
      <artifactId>liquibase-maven-plugin</artifactId> 
      <version>3.4.1</version> 
      <configuration> 
       <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase> 
       <changeLogFile>${changelog}</changeLogFile> 
       <driver>com.mysql.jdbc.Driver</driver> 
       <url>jdbc:mysql://${mysql.host}:${mysql.port}/${mysql.schema}</url> 
       <username>${mysql.username}</username> 
       <password>${mysql.password}</password> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

wir Kann auch mit Hibernate integrieren und es gibt ein Projekt in GitHub. Bitte überprüfen Sie ihre Dokumentation über Hibernate.

https://github.com/liquibase/liquibase-hibernate/releases

Hope this beantwortet Ihre Frage

bearbeitet:

liquibase --driver=oracle.jdbc.OracleDriver \ 
     --classpath=\path\to\classes:jdbcdriver.jar \ 
     --changeLogFile=com/example/db.changelog.xml \ 
     --url="jdbc:oracle:thin:@localhost:1521:XE" \ 
     --username=scott \ 
     --password=tiger \ 
     generateChangeLog 

dies die Changelog für bestehende Datenbank generieren.

Siehe - http://www.liquibase.org/documentation/generating_changelogs.html

beziehen - http://bytefilia.com/managing-database-schema-changes-liquibase-existing-schema/

Beachten Sie, dass dieser Befehl noch einige Einschränkungen. Die folgenden Arten von Objekten werden nicht exportiert: Gespeicherte Prozeduren, Funktionen, Pakete Trigger

+0

Ich bin mir dieses Plugins bewusst, danke. – zwebier

+0

Ich bin mir dieses Plugins bewusst, danke. Wie benutzt man dieses Plugin, um den ursprünglichen Änderungssatz für ein neues Projekt zu generieren? Ich weiß auch, dass es in Hibernate integriert und "mvn liquibase: diff" kann Änderungen im Modell herausfinden, zumindest in der Theorie (es gab mir NullPointerException auf ein einfaches Projekt aus irgendeinem Grund). – zwebier

Verwandte Themen