【问题标题】:Spring-boot with Liquibase Overloading Property具有 Liquibase 重载属性的 Spring-boot
【发布时间】:2014-08-13 23:52:45
【问题描述】:

我正在使用 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>

并将更改日志文件放在资源文件夹中。 db.changelog-master.xml

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

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

为了解决这个问题,我在课堂上添加了如下 bean 并尝试设置 changeLog 属性。

@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”的bean:注入 自动装配依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 自动接线字段: org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties sample.data.jpa.SampleDataJpaApplication.properties;嵌套异常 是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 符合条件的 bean 类型 [org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties] 找到依赖项:预计至少有 1 个符合条件的 bean 此依赖项的自动装配候选者。依赖注解: {@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: 否 符合条件的 bean 类型 [org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties] 找到依赖项:预计至少有 1 个符合条件的 bean 此依赖项的自动装配候选者。依赖注解: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

请在此处提供输入,为什么我会收到此异常,或者是否有任何其他可用方法来覆盖同一类,以便我可以更改 liquibase 属性的 changeLog 属性。

【问题讨论】:

    标签: spring-boot liquibase


    【解决方案1】:

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

    如果您更愿意添加自己的 Liquibase @Bean,请注意并确保您也定义了 LiquibaseProperties bean(例如,通过声明 @EnableConfigurationProperties(LiquibaseProperties.class))。

    【讨论】:

    • 嗨,戴夫,感谢您提供的信息。我在 application.properties 中使用了 liquibase.changeLog=classpath:/db/changelog/db.changelog-master.xml ,它对我很有用。这意味着,我可以通过在 application.properties 中提及相同的内容来设置我的类路径中任何 bean 的任何属性的值?
    猜你喜欢
    • 2021-02-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 2019-10-18
    相关资源
    最近更新 更多