具有 Liquibase 重载属性的 Spring-boot

Posted

技术标签:

【中文标题】具有 Liquibase 重载属性的 Spring-boot【英文标题】:Spring-boot with Liquibase Overloading Property 【发布时间】: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 属性。

【问题讨论】:

【参考方案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 的任何属性的值?

以上是关于具有 Liquibase 重载属性的 Spring-boot的主要内容,如果未能解决你的问题,请参考以下文章

带有spring-boot的自定义sql中的Liquibase参数

如何用 Spring 解锁 Liquibase 锁?

如何使用 liquibase 更改架构名称

在Spring Boot 2下激活后启动liquibase。

Liquibase 和 Spring 如何使用单独的用户进行架构更改

Spring boot - 在启动时禁用 Liquibase