【问题标题】:Integration Tests with Spring Boot使用 Spring Boot 进行集成测试
【发布时间】:2018-02-01 01:47:12
【问题描述】:

我有什么: 我正在开发一个微服务,使用带有 Web 和 SpringMyBatis 的 Spring Boot。 对于 CI 集成测试,我将使用远程 MySQL 数据库,对于本地集成测试,我将使用 H2。我对两个数据库都有不同的 application.yml 文件。

我的问题: 由于我想创建将在两个数据库上运行的集成测试,并且我将不得不使用不同的 JDBC 驱动程序(我的测试将直接在数据库上检查已插入/修改的内容),那么最好的方法是什么? 可能是使用 Spring JDBC 查询我的数据库的解决方案,以便我的数据源将直接从应用程序属性中“挑选”?

【问题讨论】:

  • 理想情况下,您只需要一个从弹簧配置文件配置的数据源。因此,您可以即时切换它,为您的 CI 选择必要的。
  • 是的,这是我的想法。所以我还需要在我的@Config 文件上配置我的 DataSource,然后从那个文件中检索驱动程序?
  • 那种。唯一的区别是驱动程序、连接 URL 和凭据。
  • 知道如何做到这一点吗?我在不同的 application.yml 上有不同的连接 URL 和凭据。但不知道如何做到这一点......

标签: java spring spring-boot jdbc continuous-integration


【解决方案1】:

正如我提到的,使用弹簧配置文件很好。定义 2 个用 @Profile("dev")@Profile("qa") 注释的数据源,并指定所需的驱动程序/连接 url/凭据。

请参阅 the example(您需要的不同数据源)和/或 the example 以获取更多信息

【讨论】:

  • 好的,我得到了你的答案。但是由于我实际上是在使用 spring 配置文件来加载不同的应用程序属性,并且在我的应用程序属性上我已经获得了所有驱动程序数据(url、用户、pass..),有没有办法恢复那个特定的数据源?
  • 有可能,但我不知道你的配置和项目结构。您必须更改未发布的代码中的某些内容
  • 好的,如果我这样使用数据源就可以了:@Autowired DataSource datasource。它将选择由正确的配置文件 application.yml 设置的数据源。感谢您的提示!
  • 不要定义多个bean...只需添加2个不同的application-<proflile>.properties而不是多个bean。这样,spring boot 将加载适当的配置文件并配置数据源。没有必要让它变得更复杂。
  • @M.Deinum 总的来说我同意 (+1) 但在某些情况下定义条件 bean 比复制属性更容易。
【解决方案2】:

Spring Boot 支持为不同的环境加载不同的属性文件。只需创建一个正确的application-<profile>.properties(或.yml,Spring Boot 就会加载相应的。

例如在application-qa.properties 中指定以下内容

spring.datasource.url=jdbc:mysql:<remote-host>/db
spring.datasource.username=<username>
spring.datasource.password=<password>

如果您想将嵌入式 H2 用于其他所有内容,则可以省略配置,因为当 H2 在类路径上时,Spring Boot 会自动为您配置内存中的 H2。

现在,在运行集成测试时,将 qa 指定为活动配置文件,您将自动连接到配置的数据源。您可以使用 Maven Profiles 来选择活动的 Spring Profile。

您的配置中不需要多个 DataSource bean,因为 Spring Boot 只会配置请求的 1 个。

【讨论】:

    猜你喜欢
    • 2020-07-24
    • 2014-08-15
    • 2020-04-09
    • 1970-01-01
    • 2018-05-04
    • 2020-02-10
    • 2021-06-01
    • 2017-03-17
    • 1970-01-01
    相关资源
    最近更新 更多