首页 > 解决方案 > 如何在不依赖 Pivotal GemFire 缓存的情况下启动 Spring Boot 应用程序

问题描述

我有一个ClientCache配置了 Pivotal GemFire 实例及其相应域对象的 Spring Boot 应用程序。我也在使用 Spring Boot Test 进行单元测试。对于每个测试用例执行,无论是通过类还是 Maven 构建,ApplicationContext如果 GemFire 缓存关闭,Spring 将无法加载。

如何在不依赖 GemFire 缓存的情况下启动 Spring Boot 应用程序?

标签: javaspringspring-bootgeodespring-data-gemfire

解决方案


我不确定我是否完全按照您的意思...

对于每个测试用例执行,无论是通过类还是 Maven 构建,ApplicationContext如果 GemFire 缓存关闭,Spring 将无法加载。

您是否正在ClientCache为测试类中的每个测试用例(方法)重新创建实例?

如果是这样,那么这可能会很棘手,因为即使在调用之后ClientCache.close(),GemFire 也可能没有完全“关闭”并释放ClientCache实例使用的所有资源。但是,通常这不会阻止ApplicationContext在后续测试用例执行时重新创建 Spring。它通常只会导致后续测试失败,因为ClientCache实例是脏的或陈旧的,保留了前一个(或最后一个)测试用例执行的旧状态。

@DirtiesContext您是否也在您的测试用例方法中使用了 Spring ?

通常,明智的做法是循环每个测试类的ApplicationContextand GemFire 缓存实例(例如ClientCache),其中测试类中的每个测试用例方法将使用相同的ApplicationContext实例ClientCache;这是最理想的。

有了这个,我有两件事要和你分享:

  1. 首先,看看新的Spring Boot for Apache Geode/Pivotal GemFire项目。文档在这里。我在将近一个月前宣布了这个项目的可用性。该项目从“客户端”的角度使用 Pivotal GemFire 构建 Spring Boot 应用程序。也就是说,它ClientCache默认为您提供一个自动配置的实例。

  2. 具体来说,看看Spring Boot for Pivotal GemFire 的测试套件,从这里开始。几乎所有这些测试类都使用一个ClientCache实例并测试 Pivotal GemFire 的各个方面,例如 CQ 或安全性等。

  3. 在某些测试类中,我使用了“模拟”ClientCache实例(例如,这个测试类,特别是这个测试配置)。然而,在许多其他情况下,我使用了一个实时的 GemFireClientCache实例,例如这个测试类,这很有趣,因为这个测试类甚至启动了一个服务器ClientCache实例(测试本身)连接到。

  4. Spring Boot for Apache Geode/Pivotal GemFire中的所有测试协调逻辑均由另一个新项目Spring Test for Apache Geode/Pivotal GemFire提供。不幸的是,Apache Geode/Pivotal GemFire的 Spring Test 在很大程度上仍然是一个 WIP,因此还没有文档。但是,我已经广泛使用这个新的测试项目来测试Spring Boot 的 Apache Geode/Pivotal GemFire。您将在扩展类中看到它的存在,例如ForkingClientServerIntegrationTestsSupport等。

总之,使用新的Spring Boot for Pivotal GemFireSpring Test for Pivotal GemFire项目作为编写更有效的单元和集成测试的指南。

最后,如果您有一个示例 GitHub 存储库可以重现您的问题,我可以帮助您指出正确的方向。

希望这可以帮助!

问候,约翰


推荐阅读