2013-05-17 7 views
11

I Schema und Ausgangsdaten im Frühjahr Kontext aktualisieren Sie die folgenden beean mit:Mit liquibase Dateipfade sowohl über Maven und Feder

<bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="changeLog" value="classpath:db/changelog/db.changelog-master.xml" /> 
    <property name="dropFirst" value="true" /> 
</bean> 

Ich verwende Maven auch liquibase-Plugin SQL-Skripte, um zu sehen, welche Tabellen zu erzeugen, erstellt und usw.

<plugin> 
       <groupId>org.liquibase</groupId> 
       <artifactId>liquibase-maven-plugin</artifactId> 
       <version>2.0.5</version> 
       <configuration> 
        <!--mvn initialize liquibase:updateSQL--> 
        <propertyFile>src/main/resources/db/config/liquibase-gensql-data-access.properties</propertyFile> 
        <changeLogFile>src/main/resources/db/changelog/db.changelog-master.xml</changeLogFile> 

       </configuration> 
      </plugin> 

Die db.changelog-master.xml Datei enthält Kind Liquibase Changelog-Dateien. Das Problem, wie man sich vom Meister darauf bezieht. Als ich Frühling verwenden Ich habe den folgenden Pfad über Classpath verwenden:

<include file="classpath:/db/changelog/db.changelog-1.0.xml"/> 

Wenn Maven verwendet wird, ist der Weg:

<include file="src/main/resources/db/changelog/db.changelog-1.0.xml"/> 

Ich möchte die gleiche Konfiguration für beide Fälle haben. Wie kann ich es archivieren?

Antwort

7

Ich kommentierte auf Igors Antwort, seine Lösung scheint nicht zu funktionieren.

Um dies zu lösen, habe ich gerade einen Patch auf Liquibase geschoben: https://github.com/liquibase/liquibase/pull/187. Dies sollte in 3.0.6-SNAPSHOT zusammengeführt werden und daher in 3.0.6 kurz verfügbar sein.

Mit dieser Änderung können Sie jetzt SpringLiquibase mit dieser zusätzlichen Zeile konfigurieren:

<property name="ignoringClasspathPrefix" value="true" /> 

Ein weiteres Beispiel/usecase diese Änderung erfordern, können Sie hier: https://github.com/LateralThoughts/spring-liquibase-extensions.

+2

Nur ein Update: Ab liquibase-3.1 heißt die Eigenschaft jetzt 'ignoreClasspathPrefix' und ist von Deault wahr. –

+0

Kleines Detail, das es für mich funktioniert hat: in Maven, geben Sie nicht den 'src/main/resources' Teil, sonst wird es nicht mit Spring kompatibel sein. Ich habe 'db/changelog/...' in Maven und 'classpath: db/changelog/...' in Spring (application.properties) konfiguriert und dann hat es funktioniert. – jdebon

7

denke ich, wenn Sie Ihre Maven Weg von ändern

<changeLogFile>src/main/resources/db/changelog/db.changelog-master.xml</changeLogFile> 

zu

<changeLogFile>db/changelog/db.changelog-master.xml</changeLogFile> 

und Update db.changelog-master.xml Datei für alle Dateien enthalten Pfad in Bezug auf src/main zu verwenden/resources-Verzeichnis wird das Problem behoben.

Ich löste dieses Problem, indem ich den gleichen Pfad zu changeLog-Dateien in Spring, Maven und Integration Test, die Liquibase aufrufen. Alle meine Changelog-Dateien befinden sich im Verzeichnis/src/main/resources/db in einem der Maven-Module innerhalb eines Projekts.

Maven Profil, das Liquibase läuft, Pfad Hinweis: db/masterChangeLog.xml

<plugin> 
        <groupId>org.liquibase</groupId> 
        <artifactId>liquibase-maven-plugin</artifactId> 
        <version>3.0.2</version> 

        <executions> 
         <execution> 
          <id>*** Install a last major release version of db ***</id> 
          <phase>process-resources</phase> 
          <goals> 
           <goal>update</goal> 
          </goals> 
          <configuration> 
           <changeLogFile>db/masterChangeLog.xml</changeLogFile> 
           <contexts>dbBuildContext, dmlDevContext</contexts> 
           <propertyFile>db/liquibase-${user.name}.properties</propertyFile> 
           <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase> 
           <logging>debug</logging> 
          </configuration> 
         </execution> 

db/masterChangeLog.xml-Datei enthält die folgenden Dateien:

<include file="db/install.xml"/> 
<include file="db/update.xml"/> 

db/install.xml Datei enthält weitere Changelog-Dateien (so auch update.xml):

Spring Kontext führt die gleiche se t von db-Skripten beim App-Start wie folgt:

+0

Ich habe eine ähnliche Konfiguration mit Liquibase 3.0.5 getestet und das funktioniert nicht. Wenn ich Migrationen mit SpringLiquibase durchführe, wird allen meinen FILBENAME-Spaltenwerten für Changesets das Präfix "classpath:" vorangestellt, während bei der Migration über Maven kein solches Präfix vorangestellt wird. Aus diesem Grund treten Migrationen beim Verwenden beider Methoden auf. – Rolf

+0

Ich bin etwas verwirrt mit Ist es nicht ? Bitte klären Sie. –

+0

Danke Mann. Perfekt!!!!! Mein einziger Unterschied ist: fabiohbarbosa