如何将mode=mysql添加到Spring Boot 1.4.1中的嵌入式H2 DB中,以便@DataJpaTest?

2022-09-02 00:46:37

在执行 junit 测试时,使用架构.sql文件创建我的 sql 架构时遇到了一些问题,而此架构包含 mysql 特定的表达式。我必须将 添加到H2网址。mode=mysql

例如,像这样:jdbc:h2:mem:testd;MODE=MYSQL

但是Spring boot会自动使用enum org.springframework.boot.autoconfigure.jdbc.EmbeddedDatabaseConnection中定义的url及其url。

jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE.

我已经尝试了类似的方法来使它工作,但spring并没有从我的test-application.properties中获取。我的 test-application.properties 中的所有其他设置都已成功读取。spring.datasource.url=jdbc:h2:mem:testdb;MODE=MYSQL

如果我让 spring/hibernate 使用实体中的 javax.persistence 注释创建模式(没有模式.sql文件),一切正常。

有没有简单的方法来添加模式?


答案 1

设置

spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL

在 application-test.properties 中,加上

@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("test")

在测试类上


答案 2

我遇到了同样的问题。它不会在运行测试时获取 url。我正在使用 flyway 来管理我的脚本。通过遵循这几个步骤,我能够让所有这些工作在一起。

在 src/test/resources/db/migration 中创建了一个脚本,使其成为 flyway 运行的第一个脚本。V1_init.sql

SET MODE MYSQL; /* another h2 way to set mode */

CREATE SCHEMA IF NOT EXISTS "public"; /* required due to issue with flyway --> https://stackoverflow.com/a/19115417/1224584*/

更新以包括架构名称公共:application-test.yaml

flyway:
  schemas: public

确保测试指定了配置文件:@ActiveProfiles("test")


推荐