2014-06-23 137 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的任何属性的值? –