Spring开机。 @DataJpaTest H2 嵌入式数据库创建模式
Spring Boot. @DataJpaTest H2 embedded database create schema
我的数据层中有几个实体存储在特定模式中。例如:
@Entity
@Table(name = "FOO", schema = "DUMMY")
public class Foo {}
我正在尝试设置 H2 嵌入式数据库以对我的数据层进行集成测试。
我在测试中使用 @DataJpaTest
注释来自动配置 H2 嵌入式数据库。但是,创建表失败,因为在数据库初始化时未创建架构 DUMMY
。
关于在测试用例中创建表之前如何创建模式的任何想法?
我试过使用@Sql(statements="CREATE SCHEMA IF NOT EXISTS DUMMY") 但没有成功。
此外,我尝试在我的 test.properties
文件中将 spring.datasource.url = jdbc:h2:mem:test;INIT=CREATE SCHEMA IF NOT EXISTS DUMMY
与 TestPropertySource("classpath:test.properties")
一起设置,但这也不起作用。
我遇到了同样的问题,我设法通过使用内容
创建schema.sql(在资源文件夹中)来解决
CREATE SCHEMA IF NOT EXISTS <yourschema>
可以找到文档 here,但恕我直言,由于缺乏实际示例,它变得非常复杂。
警告:此脚本也在正常(非测试)环境中执行。
不是强制的,但是很好的做法,只在测试范围内添加 h2 依赖
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
经过几个小时的努力,我找到了解决方法。
您可以在 application.properties
中定义 spring.jpa.properties.hibernate.default_schema = DUMMY
。
然后在你的test.properties
中设置spring.jpa.properties.hibernate.default_schema =
并与@TestPropertySource("classpath:test.properties")
一起使用
因此,通过这种方式将不会创建 DUMMY 架构,并且会在默认架构中创建实体。
在我的例子中 schema.sql
在 test/resources
下没用。
test/resources/application.yml
文件中的以下配置有效。
spring:
datasource:
username: sa
password: sa
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:usrmgmt;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL;INIT=CREATE SCHEMA IF NOT EXISTS DUMMY;
liquibase:
change-log: classpath:db/changelog/db.changelog-master.xml
在上面的配置中,提供了下面的附加配置
INIT=CREATE SCHEMA IF NOT EXISTS DUMMY
对现有数据库的扩展 url。在没有这个的情况下,面临异常 Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Schema "DUMMY" not found;
.
spring.liquibase.change-log
属性。在没有这个的情况下,面临异常 Caused by: liquibase.exception.ChangeLogParseException: classpath:/db/changelog/db.changelog-master.yaml does not exist
.
我想你正在寻找这个注释:
@AutoConfigureTestDatabase(replace=Replace.NONE)
示例:
@DataJpaTest
@AutoConfigureTestDatabase(replace= AutoConfigureTestDatabase.Replace.NONE)
class UserRepoTest {...}
我的数据层中有几个实体存储在特定模式中。例如:
@Entity
@Table(name = "FOO", schema = "DUMMY")
public class Foo {}
我正在尝试设置 H2 嵌入式数据库以对我的数据层进行集成测试。
我在测试中使用 @DataJpaTest
注释来自动配置 H2 嵌入式数据库。但是,创建表失败,因为在数据库初始化时未创建架构 DUMMY
。
关于在测试用例中创建表之前如何创建模式的任何想法?
我试过使用@Sql(statements="CREATE SCHEMA IF NOT EXISTS DUMMY") 但没有成功。
此外,我尝试在我的 test.properties
文件中将 spring.datasource.url = jdbc:h2:mem:test;INIT=CREATE SCHEMA IF NOT EXISTS DUMMY
与 TestPropertySource("classpath:test.properties")
一起设置,但这也不起作用。
我遇到了同样的问题,我设法通过使用内容
创建schema.sql(在资源文件夹中)来解决CREATE SCHEMA IF NOT EXISTS <yourschema>
可以找到文档 here,但恕我直言,由于缺乏实际示例,它变得非常复杂。 警告:此脚本也在正常(非测试)环境中执行。
不是强制的,但是很好的做法,只在测试范围内添加 h2 依赖
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
经过几个小时的努力,我找到了解决方法。
您可以在 application.properties
中定义 spring.jpa.properties.hibernate.default_schema = DUMMY
。
然后在你的test.properties
中设置spring.jpa.properties.hibernate.default_schema =
并与@TestPropertySource("classpath:test.properties")
因此,通过这种方式将不会创建 DUMMY 架构,并且会在默认架构中创建实体。
在我的例子中 schema.sql
在 test/resources
下没用。
test/resources/application.yml
文件中的以下配置有效。
spring:
datasource:
username: sa
password: sa
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:usrmgmt;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL;INIT=CREATE SCHEMA IF NOT EXISTS DUMMY;
liquibase:
change-log: classpath:db/changelog/db.changelog-master.xml
在上面的配置中,提供了下面的附加配置
INIT=CREATE SCHEMA IF NOT EXISTS DUMMY
对现有数据库的扩展 url。在没有这个的情况下,面临异常Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Schema "DUMMY" not found;
.spring.liquibase.change-log
属性。在没有这个的情况下,面临异常Caused by: liquibase.exception.ChangeLogParseException: classpath:/db/changelog/db.changelog-master.yaml does not exist
.
我想你正在寻找这个注释:
@AutoConfigureTestDatabase(replace=Replace.NONE)
示例:
@DataJpaTest
@AutoConfigureTestDatabase(replace= AutoConfigureTestDatabase.Replace.NONE)
class UserRepoTest {...}