mysql - SpringBoot 的 DataJpaTest 与 Flyway

标签 mysql testing spring-boot spring-data-jpa flyway

我在我的项目中使用 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 一起使用?

最佳答案

它正在尝试使用 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 { ... }

关于mysql - SpringBoot 的 DataJpaTest 与 Flyway,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45439568/

相关文章:

PHP 数组 - `array_splice` 问题

Mysql 在一个查询中使用连接表进行搜索和排序

mysql - 检查MySQL中的查询是否至少有2行

mysql - SaaS数据库设计

testing - 我如何使用 JustMock 来测试接口(interface)事件委托(delegate)

html - 从 Protractor 调用 Angular 函数

security - 在持续集成环境中测试跨站点脚本 (XSS) 漏洞

java - HEROKU - 无法使用 jdk11 部署 java 应用程序

java - Spring Boot - 如何为指定根中的多个路由提供一个静态 html 文件

Spring Boot 应用程序将从 Key Vault 读取配置并连接到 SQL?