具有 Liquibase 重载属性的 Spring-boot
Posted
技术标签:
【中文标题】具有 Liquibase 重载属性的 Spring-boot【英文标题】:Spring-boot with Liquibase Overloading Property 【发布时间】:2014-08-13 23:52:45 【问题描述】:我正在使用 Spring boot 和 Liquibase。 使用此网址作为指导
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 Boot 2下激活后启动liquibase。