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

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

我发现我可以通过添加@ActiveProfiles(“local”)来使其工作,其中我有一个指向我本地MySQL的application-local.properties,但是在任何地方添加它都是太多的工作,运行测试,然后再次删除它(因为我只想手动对MySQL运行,CI环境将针对内存db运行).

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

更新:

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

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

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

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

application.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

并在集成测试类中使用@ActiveProfiles(“postgres”)或使用VM参数启动容器:

java -Dspring.profiles.active=h2 ...
点赞