【问题标题】:Use a secondary h2 database for testing an API in Spring boot在 Spring Boot 中使用辅助 h2 数据库测试 API
【发布时间】:2022-01-04 08:11:04
【问题描述】:

我正在开发一个 API 来管理我工作的公司的数据库,问题是当我必须运行不同的测试时,我必须使用我有一些的“真实”开发数据库(在 h2 中)真实数据。

我想了想,我想做的是创建一个可以在测试阶段开始的新 h2 数据库,并用它来测试我所有的 Controller 方法。

问题是我不知道如何在 Spring Boot 中实现这一点。如果您能帮助我,我将不胜感激。

总结一下:

  • 我有一个 h2 数据库
  • 我想使用辅助 h2 进行测试
  • 我怎样才能做到这一点?

谢谢!

【问题讨论】:

  • 这就是 SpringBoot 的配置文件的用途,不是吗?有一个用于生产的配置文件和另一个用于测试的配置文件。在测试配置文件中,比如application-testing.properties,使用 H2 作为您的数据库。如果您不清楚,我会发布一个解释这一点的答案。
  • @SreeKumar 我对 Spring Boot 完全陌生,所以我有点迷茫,如果你能解释一下如何做,我将不胜感激......谢谢队友

标签: java spring-boot api testing h2


【解决方案1】:

假设您有 2 个环境 - “生产”和“测试”。

第一步:为每个环境定义一个配置文件

为每个环境保留一个application.properties 文件。每个都将包含自己的数据库设置。像这样:

制作: application-production.properties

#Start: For MySQL 8.0 database.
spring.datasource.url= jdbc:mysql://${DB_IP}:${DB_PORT}/${DB_SCHEMA}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASSWD}
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL8Dialect
#End: For MySQL 8.0 database.

spring.sql.init.platform=mysql

测试: application-testing.properties

# Start: For H2 in-memory database.
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=secret
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
# End: For H2 in-memory database.

spring.sql.init.platform=h2

第 2 步:构建您的应用程序可启动 JAR

这里没有什么好解释的。 :)

第 3 步:运行 JAR 时传递配置文件名称

  • 对于测试环境: $ java -jar -Dspring.profiles.active=testing <spring-boot-application-jar>
  • 对于生产环境: $ java -jar -Dspring.profiles.active=production <spring-boot-application-jar>

第一个将使用application-testing.properties,第二个将使用application-production.properties

还有一些其他因素,例如 application.properties 中的默认属性和基于配置文件的属性中的特定属性等,您可以在 Spring docs 上阅读。

【讨论】:

    猜你喜欢
    • 2019-05-17
    • 2019-02-02
    • 1970-01-01
    • 2015-10-09
    • 2020-12-25
    • 1970-01-01
    • 2022-07-20
    • 2019-09-06
    • 2018-12-24
    相关资源
    最近更新 更多