2013-05-17 4 views
11

aggiorno schema ei dati iniziali, in un contesto di primavera con la seguente beean:Utilizzando i percorsi dei file liquibase via sia Maven e la primavera

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

Io uso anche Maven liquibase plugin per generare script SQL per vedere quali tabelle sono creato e ecc

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

Il file db.changelog-master.xml comprende bambino liquibase file changelog. Il problema, come fare riferimento a loro dal maestro. Quando uso primavera devo usare il seguente percorso via classpath:

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

Quando si utilizza Maven, il percorso è:

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

Mi piacerebbe avere la stessa configurazione per entrambi i casi. Come posso archiviarlo?

risposta

7

ho commentato la risposta di Igor, la sua soluzione non sembra funzionare.

Per risolvere questo problema, ho appena inviato una patch a Liquibase: https://github.com/liquibase/liquibase/pull/187. Questo dovrebbe essere unito in 3.0.6-SNAPSHOT e quindi disponibile a breve in 3.0.6.

Con questa modifica, è ora possibile configurare SpringLiquibase con questa linea aggiuntiva:

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

Un altro esempio/usecase che richiedono questo cambiamento può essere trovato qui: https://github.com/LateralThoughts/spring-liquibase-extensions.

+2

Solo un aggiornamento: come da liquibase-3.1, la proprietà è ora chiamata 'ignoreClasspathPrefix' ed è true da deault. –

+0

Piccoli dettagli che hanno funzionato per me: in Maven, non specificare la parte 'src/main/resources', altrimenti sarà incompatibile con Spring. Ho configurato 'db/changelog/...' in Maven e 'classpath: db/changelog/...' in Spring (application.properties) e poi ha funzionato. – jdebon

7

penso che se si modifica il percorso Maven da

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

a

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

e aggiornamento del file db.changelog-master.xml per tutto incluso i file da utilizzare percorso relativo alla src/main/resources, risolverà il problema.

Ho risolto questo problema utilizzando lo stesso percorso per cambiare i file Log in Spring, Maven e Test di integrazione che chiamano Liquibase. Tutti i miei file di changelog si trovano nella directory/src/main/resources/db in uno dei moduli Maven all'interno di un progetto.

profilo

Maven che corre Liquibase, avviso percorso: 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> 

di file db/masterChangeLog.xml include questi file:

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

di file db/install.xml comprende altri file changelog (quindi update.xml):

<includeAll path="db/install/seq"/> 
<includeAll path="db/install/tab"/> 
<includeAll path="db/install/cst"/> 
<includeAll path="db/latest/vw" /> 

contesto di primavera esegue lo stesso se t di script db su avvio app come segue:

<bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase"> 
    <property name="dataSource" ref="baseCostManagementDataSource" /> 
    <property name="changeLog" value="classpath:db/masterChangelog.xml" /> 
    <property name="contexts" value="dbBuildContext, dmlDevContext" /> 
</bean> 
+0

Ho testato una configurazione simile con Liquibase 3.0.5 e questo non funziona. Se eseguo le migrazioni con SpringLiquibase, tutti i valori della colonna FILENAME dei miei changeset verranno preceduti con "classpath:" mentre nessun prefisso di questo tipo viene anteposto quando le migrazioni vengono eseguite tramite Maven. Pertanto, le migrazioni entrano in conflitto quando si utilizzano entrambi i modi. – Rolf

+0

Sono un po 'confuso con non è ? si prega di precisare. –

+0

Grazie amico. Perfezionare!!!!! La mia unica differenza è: fabiohbarbosa

Problemi correlati