2014-06-23 21 views
7

Sto usando primavera avvio e Liquibase. Utilizzando questo URL come linee guidaPrimavera-boot con Liquibase Sovraccarico Proprietà

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/

Nel pom.xml, l'iscrizione qui sotto è presente in modo che la primavera di avvio conosce liquibase.

<dependency> 
     <groupId>org.liquibase</groupId> 
     <artifactId>liquibase-core</artifactId> 
</dependency> 

e inserire il file di registro delle modifiche nella cartella delle risorse. db.changelog-master.xml

Ora avvio primavera primo tring per trovare db.changelog-master.yaml nel classpath e gettando l'eccezione in questo modo.

Non riesci a trovare posizione changelog: classe di risorse percorso [db/changelog/db.changelog-master.yaml

Per risolvere il problema, ho aggiunto il fagiolo come qui di seguito nella mia classe e ha cercato di impostare ChangeLog proprty.

@Configuration 
@ComponentScan 
@EnableAutoConfiguration 
public class SampleDataJpaApplication { 


@Autowired 
LiquibaseProperties properties; 
@Autowired 
private DataSource dataSource; 

@Bean 
public SpringLiquibase liquibase() { 
    SpringLiquibase liquibase = new SpringLiquibase(); 
    properties.setChangeLog("classpath:/db/changelog/db.changelog-master.xml"); 
    liquibase.setChangeLog(this.properties.getChangeLog()); 
    liquibase.setContexts(this.properties.getContexts()); 
    liquibase.setDataSource(this.dataSource); 
    liquibase.setDefaultSchema(this.properties.getDefaultSchema()); 
    liquibase.setDropFirst(this.properties.isDropFirst()); 
    liquibase.setShouldRun(this.properties.isEnabled()); 
    return liquibase; 
} 

public static void main(String[] args) throws Exception { 
    Logger logger = LoggerFactory.getLogger("SampleDataJpaApplication"); 
    SpringApplication springApplication = new SpringApplication(); 
    springApplication.run(SampleDataJpaApplication.class, args); 
} 

} 

ma non riesce con il messaggio.

org.springframework.beans.factory.BeanCreationException: Errore la creazione di fagioli con nome 'sampleDataJpaApplication': Iniezione di dipendenze autowired fallito; l'eccezione annidata è org.springframework.beans.factory.BeanCreationException: non Could campo autowire: org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties sample.data.jpa.SampleDataJpaApplication.properties; l'eccezione annidata è org.springframework.beans.factory.NoSuchBeanDefinitionException: No fagiolo qualifica di tipo [org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties] trovato per la dipendenza: previsto con almeno 1 di fagioli che si qualifica come autowire candidato per questa dipendenza. annotazioni Dipendenza: {@ org.springframework.beans.factory.annotation.Autowired (richiesto = true)}

causati da: org.springframework.beans.factory.BeanCreationException: Impossibile autowire campo: org.springframework .boot.autoconfigure.liquibase.LiquibaseProperties sample.data.jpa.SampleDataJpaApplication.properties; l'eccezione annidata è org.springframework.beans.factory.NoSuchBeanDefinitionException: No fagiolo qualifica di tipo [org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties] trovato per la dipendenza: previsto con almeno 1 di fagioli che si qualifica come autowire candidato per questa dipendenza. annotazioni Dipendenza: {@ org.springframework.beans.factory.annotation.Autowired (richiesto = true)}

Si prega di fornire gli input qui, perché sto ottenendo questa eccezione o Esiste un altro modo a disposizione sovrascrivere la stessa classe in modo da poter modificare la proprietà changeLog delle proprietà di liquibase.

risposta

9

Non sono del tutto sicuro di quale sia il percorso di runtime esatto per il registro delle modifiche, ma perché non si utilizza semplicemente il "liquibase".*" immobili a application.properties? Si dovrebbe essere in grado di lasciare il Liquibase@Bean e lasciare Boot farlo per voi.

Se si preferisce aggiungere il proprio Liquibase@Bean poi prendere il suggerimento e assicurarsi che si definisce un fagiolo LiquibaseProperties come bene (ad esempio dichiarando @EnableConfigurationProperties(LiquibaseProperties.class))

+3

Ciao Dave, Grazie per l'informazione Ho usato liquibase.changeLog = classpath: /db/changelog/db.changelog-master.xml in application.properties e ha funzionato per me è fantastico Significa che posso impostare il valore di qualsiasi proprietà di qualsiasi bean nel mio percorso di classe menzionando lo stesso in application.properties? –