SpringBoot 的 DataJpaTest 与 Flyway

Posted

技术标签:

【中文标题】SpringBoot 的 DataJpaTest 与 Flyway【英文标题】:SpringBoot's DataJpaTest with Flyway 【发布时间】:2018-01-08 10:10:05 【问题描述】:

我在我的项目中使用 flyway 来设置数据库架构。当我尝试使用 @DataJpaTest 注释测试一些 JPA 层时,我在启动时收到此错误:

> Caused by:
> org.flywaydb.core.internal.command.DbMigrate$FlywayMigrateSqlException:
> Migration V1__init.sql failed
> ----------------------------- SQL State  : 42581 Error Code : -5581 Message    : unexpected token: AUTO_INCREMENT : line: 2 Location   :
> db/migration/V1__init.sql
> ..../target/classes/db/migration/V1__init.sql) Line       : 1
> Statement  : CREATE TABLE mytable (    id INT NOT NULL AUTO_INCREMENT
> PRIMARY KEY,

看起来它正在尝试使用 HSQL 而不是常规 SQL

有没有办法可以将 @DataJpaTest 与 flyway 一起使用?

【问题讨论】:

【参考方案1】:

它正在尝试使用HSQLDB 来执行脚本。您可以做的是为测试创建一个数据库模式并在不同的配置文件中使用它。假设您使用的是 mysql,您的资源源文件夹中可能有一个 application-test.properties,如下所示:

spring.datasource.url=jdbc:mysql://localhost/test_db
spring.datasource.username=your_user
spring.datasource.password=your_pass
spring.jpa.hibernate.ddl-auto=create

然后,在您的测试类中,您需要使用注释 @ActiveProfiles 激活此配置文件,并使用 @AutoConfigureTestDatabase 中的注释配置禁用 HSQLDB:

@DataJpaTest
@ActiveProfiles("test")
@AutoConfigureTestDatabase(replace = Replace.NONE)
public class DBTest  ... 

【讨论】:

我仍然遇到同样的错误(flyway 仍然尝试使用 HSQLDB 执行我的迁移脚本) 你的application-test.propertiessrc/main/resources里面吗?

以上是关于SpringBoot 的 DataJpaTest 与 Flyway的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 1.4 @DataJpaTest - 创建名为“dataSource”的 bean 时出错

Spring Boot:使用 @DataJpaTest 和 Flyway 设置 Hibernate 命名策略

使用 @DataJpaTest 设置自定义方案

如何在使用 DataJpaTest 的 Spring Boot 2.0 测试中访问 H2 控制台

使用 Eureka / Feign 时 @DataJpaTest 失败

在 DataJPATest 下运行单元测试时出现问题