如何使用 Spring Boot 一次性针对真实数据库而不是内存中运行 @DataJpaTest

Wim*_*uwe 9 java spring-test spring-boot

我正在使用 Spring Boot 1.4.3 并且有一大堆用@DataJpaTest. 默认情况下,它们针对内存数据库运行。我希望能够暂时针对本地 MySQL 运行所有这些。我怎样才能以简单的方式做到这一点?

我发现,我可以把它加入了一个工作,@ActiveProfiles("local")在那里我有一个application-local.properties是指向我的本地MySQL,但它仅仅是太多的工作,以补充说无处不在,运行测试,然后将其删除(因为我只想针对 MySQL 手动运行它,CI 环境将针对内存数据库运行)。

如果这很重要,我正在使用 Maven。

更新:

所以我有一个application-local.properties包含 db 属性来连接到我的本地 MySQL 数据库(我已经使用它来针对本地 MySQL 运行我的应用程序)

然后我在 IntelliJ 中右键单击一个包并选择“运行包中的所有测试”。在该运行配置的设置中,我添加-Dspring.profiles.active=local到“VM 选项”字段。

我原以为这会local在测试期间激活配置文件,但事实并非如此。如果我停止本地 MySQL,测试仍然运行良好。

oot*_*ero 1

您可以在同一 application.properties(或 .yml)中添加具有 MySQL 数据源属性的配置文件,如下所示:

应用程序.yml

# Existing properties

---
spring:
  profiles: h2
# More h2-related properties

---
spring:
  profiles: postgres
  database:
    driverClassName: org.postgresql.Driver
  datasource:
    url: jdbc:postgresql://localhost:5432/db_dvdrental
    username: user_dvdrental
    password: changeit
  jpa:
    database: POSTGRESQL
    generate-ddl: false
# More postgres-related properties
Run Code Online (Sandbox Code Playgroud)

@ActiveProfiles("postgres")在集成测试类中使用或使用 VM 参数启动容器,如下所示:

java -Dspring.profiles.active=h2 ...
Run Code Online (Sandbox Code Playgroud)