使用Liquibase重载属性的Spring-boot

Kul*_*sad 7 liquibase spring-boot

我正在使用Spring bootLiquibase.使用此网址作为指南

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

pom.xml,下面的条目存在,以便spring boot知道liquibase.

<dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-core</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

并将changelog文件放在资源文件夹中.db.changelog-master.xml

现在Spring引导首先在类路径中找到db.changelog-master.yaml并抛出这样的异常.

找不到changelog位置:类路径资源[db/changelog/db.changelog-master.yaml

为了解决问题,我在我的课程中添加了如下所示的bean,并尝试设置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);
}

}
Run Code Online (Sandbox Code Playgroud)

但它没有消息.

org.springframework.beans.factory.BeanCreationException:创建名为'sampleDataJpaApplication'的bean时出错:注入自动连接的依赖项失败; 嵌套异常是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]的限定bean依赖:预期至少有1个bean符合此依赖关系的autowire候选者.依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}

引起: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]的限定bean依赖:预期至少有1个bean符合此依赖关系的autowire候选者.依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}

请在这里提供输入,为什么我得到此异常或是否有任何其他可用的方法来覆盖相同的类,以便我可以更改liquibase属性的changeLog属性.

Dav*_*yer 12

我不完全确定更改日志的确切运行时路径是什么,但为什么不直接使用"liquibase.*"属性application.properties?您应该可以省略Liquibase @Bean并让Boot为您执行此操作.

如果您希望自己添加,请 Liquibase @Bean接受提示并确保定义一个LiquibasePropertiesbean(例如通过声明@EnableConfigurationProperties(LiquibaseProperties.class)).

  • 嗨戴夫,谢谢你的信息.我在application.properties中使用了liquibase.changeLog = classpath:/db/changelog/db.changelog-master.xml,这对我很有帮助.这意味着,我可以通过在application.properties中提及相同来设置我的类路径中任何bean的任何属性的值? (3认同)