使用 h2 和 spring boot 进行测试

Posted

技术标签:

【中文标题】使用 h2 和 spring boot 进行测试【英文标题】:Tests using h2 and spring boot 【发布时间】:2019-04-01 13:15:33 【问题描述】:

我正在使用 Postgresql 数据库和模式开发应用程序。 在 Entity 中,我使用注释 @table (schema = 'schema name')。 当我在 h2 上运行测试时,出现错误:

Caused by: org.h2.jdbc.JdbcSQLException: Schema "schema name" not found; SQL statement:

我尝试创建文件 schema.sql,包含:

CREATE SCHEMA IF NOT EXISTS schema name AUTHORIZATION sa;
CREATE SCHEMA IF NOT EXISTS shcema name2 AUTHORIZATION sa;
...

但没有成功。 有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

尝试使用 spring.datasource.url 属性定义模式:

spring.datasource.url=jdbc:h2:mem:testdb;INIT=CREATE SCHEMA IF NOT EXISTS 架构名称

【讨论】:

我改成这个 src->resources->schema.sql,并在 application.properties spring.datasource.schema=schema.sql。不成功。如果我做 spring.datasource.url=jdbc:h2:mem:testdb;INIT=CREATE SCHEMA IF NOT EXISTS 模式名称,工作,但我有太多模式... 这种情况下你有多个模式定义,如果你想从你的 sql 文件中使用模式然后从'spring.datasource.url'属性中删除';INIT=CREATE SCHEMA IF NOT EXISTS schema name'

以上是关于使用 h2 和 spring boot 进行测试的主要内容,如果未能解决你的问题,请参考以下文章

使用 h2database 进行 Spring boot 1.4 测试(在每个测试中回滚)

使用 H2 进行 Spring Boot 测试 - 未找到表“OAUTH_ACCESS_TOKEN”

为啥 H2 进行 spring-boot 测试,但它会将数据写入我的本地 mysql 数据库?

如何告诉 Spring Boot 使用另一个数据库进行测试?

如何在spring boot中创建H2+flyway测试数据库?

在spring boot中进行单元测试之前,通过data.sql文件向h2数据库中插入数据