2014-06-23 171 views
7

我正在使用彈簧啓動Liquibase。 使用這個網址爲指導彈簧啓動與Liquibase超載屬性

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

pom.xml,下面的條目存在,使春天開機知道liquibase

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

並將changelog文件放在資源文件夾中。 db.changelog-master.xml

現在,Spring引導首先要在classpath中查找db.changelog-master.yaml並拋出異常。

找不到的changelog位置:類路徑的資源[DB /變化/ db.changelog-master.yaml

爲了解決這個問題,我已經在我的課加豆狀下方,並試圖設置的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); 
} 

} 

但它與信息失敗。

org.springframework.beans.factory.BeanCreationException:錯誤 創建名爲 'sampleDataJpaApplication' 豆:中 自動裝配依賴注入失敗;嵌套的異常是 org.springframework.beans.factory.BeanCreationException:無法 自動裝配字段: org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties sample.data.jpa.SampleDataJpaApplication.properties;嵌套異常 是org.springframework.beans.factory.NoSuchBeanDefinitionException:無類型的 排位豆 [org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties] 找到依賴性:預期至少1豆,其有資格作爲 自動裝配候選爲此依賴。依賴註解: {@ org.springframework.beans.factory.annotation.Autowired(所需=真)}

引起:org.springframework.beans.factory.BeanCreationException: 未能進行自動裝配字段: org.springframework .boot.autoconfigure.liquibase.LiquibaseProperties sample.data.jpa.SampleDataJpaApplication.properties;嵌套異常 是org.springframework.beans.factory.NoSuchBeanDefinitionException:無類型的 排位豆 [org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties] 找到依賴性:預期至少1豆,其有資格作爲 自動裝配候選爲此依賴。依賴註釋: {@ org.springframework.beans.factory.annotation.Autowired(必需=真)}

請輸入這裏,爲什麼我收到此異常或有任何其他可用的辦法重寫相同的類,以便我可以更改liquibase屬性的changeLog屬性。

回答

9

我不完全確定您的更改日誌的確切運行時路徑是什麼,但您爲什麼不使用「liquibase」。在application.properties *」屬性呢?你應該可以離開了Liquibase@Bean,讓引導爲你做它。

如果你喜歡添加自己Liquibase@Bean然後心領神會,並確保你定義一個LiquibaseProperties bean作爲(例如聲明@EnableConfigurationProperties(LiquibaseProperties.class)

+3

嗨Dave,感謝您的信息。我在application.properties中使用了liquibase.changeLog = classpath:/db/changelog/db.changelog-master.xml,它對我來說非常棒。這意味着,我可以通過在application.properties中提及相同的值來設置我的類路徑中任何bean的任何屬性的值? –