如何在Spring Boot 1.4.1中为@DataJpaTest添加mode = mysql到嵌入式H2数据库?

Mar*_*rco 15 java mysql hibernate h2 spring-boot

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

例如这样的事情: jdbc:h2:mem:testd;MODE=MYSQL

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

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

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

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

有一种简单的方法来添加模式吗?

anz*_*ney 13

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

V1_init.sql在src/test/resources/db/migration中创建了一个脚本,这样它就是flyway运行的第一个脚本.

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*/
Run Code Online (Sandbox Code Playgroud)

更新application-test.yaml为包含架构名称public:

flyway:
  schemas: public
Run Code Online (Sandbox Code Playgroud)

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


小智 8

spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL
Run Code Online (Sandbox Code Playgroud)

在application-test.properties中,加上

@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("test")
Run Code Online (Sandbox Code Playgroud)

在测试课上


Sla*_*hin 6

我已经尝试过类似的方法来让它工作,但是 spring 没有从我的 test-application.properties 中获取 spring.datasource.url=jdbc:h2:mem:testdb;MODE=MYSQL

您是否尝试附加此参数而不是重写现有参数?

spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL
Run Code Online (Sandbox Code Playgroud)

我的 test-application.properties 中的所有其他设置均已成功读取。

我认为该文件应该命名为application-test.properties.