【问题标题】:Spring Boot 2.1.0 and Flyway 4.2.0 - TestsSpring Boot 2.1.0 和 Flyway 4.2.0 - 测试
【发布时间】:2019-05-10 13:02:28
【问题描述】:

由于旧的 Oracle DB,我需要在我的项目中使用 Flyway 4.2.0。在 Spring Boot 2.1.0 中,Flyway 包含在 Spring Core 中,因此我需要以编程方式创建 Flyway Bean。

@Bean(initMethod = "migrate")
Flyway flyway() {
    Flyway flyway = new Flyway();
    flyway.setBaselineOnMigrate(true);
    flyway.setDataSource(baseUrl, username, password);
    return flyway;
}

问题是如何在测试中做到这一点?我想针对内存数据库运行测试,因此我将 application.yml 包含在测试/资源中。但是随后找不到 Flyway bean。当我从 test/resources 中删除 application.yml 时,它运行良好,但属性是从 main/resources 中的 application.yml 读取的。我尝试将测试更改为不是@SpringBootTest,我可以手动创建Flyway bean,但是在放置@TestConfiguration 之后我需要手动创建所有bean,而不仅仅是Flyway。何去何从,只是手动创建 Flyway bean,其余的都交给 Spring Injection?

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class SomeTest {
  @Autowired
  private SomeService someService;
  @Test
  public void test(){
    String helloString = someService.hello();
}}

演示项目可以在这里找到:https://github.com/troger19/demo.git

【问题讨论】:

    标签: java spring-boot flyway


    【解决方案1】:

    您可以使用 flyway-test-extensions,这是 Flyway 的一个库,旨在允许在 Spring 中针对 Flyway 管理的数据库进行测试,

    您可以查看项目的文档here,以及一些使用示例。

    【讨论】:

    • 我不明白这有什么帮助..我只需要针对内存数据库运行 Flyway,但是因为以编程方式(因为旧版本 4.2.0)和设置值来挑战 Flyway从 application.properties,我无法在 SpringBootTest 中更改它们。如果我定义了@Configuration 注解,我还需要创建其他bean,如果我在test/resource 中创建appplicatino.properties,则根本不会创建Flyway Bean。
    猜你喜欢
    • 2019-04-19
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2018-10-07
    • 2019-02-02
    • 1970-01-01
    • 2016-11-29
    • 2015-05-29
    相关资源
    最近更新 更多