Spring-启动时不考虑 liquibase 属性

Spring-boot not respecting liquibase properties

我正在设置 liquibase 以在新的 spring 启动应用程序中管理我的数据库。我需要我的 class 路径中的 liquibase 依赖项,以便在某些集成测试 运行 后重置数据库状态。在我的测试期间,我不希望在应用程序上下文初始化期间通过 spring 自动配置启用 liquibase。我已经尝试将 liquibase.enabled = false 添加到 application.properties,但是当我调试 LiquibaseAutoConfiguration class 时,启用似乎始终设置为 true。

我不是 spring 的新手,但我是 spring-boot 的自动配置的新手。有没有人遇到 spring 引导不尊重 application.properties 中的属性的问题?

我的设置相当简单:

相关代码片段:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { SpringBootClass.class })
public class databaseTests{
    @Before
    public void setup() throws LiquibaseException, SQLException {
        Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(dataSource.getConnection()));
        Liquibase liquibase = new Liquibase("db/changelog/db.changelog-master.yaml", new FileSystemResourceAccessor("src/main/resources/"),database );
        liquibase.dropAll();
        liquibase.update("test");
    }
..
}

@SpringBootApplication
@Import({ DataSourceConfig.class, HibernateConfig.class, OauthConfig.class })
@EnableConfigurationProperties 
public class SpringBootClass {
..
}

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.6.RELEASE</version>
<!--   <liquibase.version>3.3.5</liquibase.version> -->


<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
    <scope>test</scope>
</dependency>

如果您希望您的测试使用 application.properties,您需要 运行 它们作为 Spring 启动应用程序。您对 @ContextConfiguration 的使用意味着您目前 运行 将它们作为普通 Spring 框架应用程序使用。将 @ContextConfiguration 注释替换为 @SpringApplicationConfiguration.

应该有 RTFM...

来自 spring boot documentation

ConfigFileApplicationContextInitializer is an ApplicationContextInitializer that can apply to your tests to load Spring Boot application.properties files. You can use this when you don’t need the full features provided by @SpringApplicationConfiguration.

@ContextConfiguration(classes = Config.class, initializers = ConfigFileApplicationContextInitializer.class)

更改我的配置以使用初始化程序有效。