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

问题描述 投票:0回答:2

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

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

java spring spring-boot geode spring-data-gemfire
2个回答
1
投票

我不确定我完全遵循你的意思......

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

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

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

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

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

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

  1. 首先,看看新的Spring Boot for Apache Geode/Pivotal GemFire项目。文档是here。我announced近一个月前这个项目的可用性。该项目采用“客户端”视角,使用Pivotal GemFire构建Spring Boot应用程序。也就是说,它默认为您提供自动配置的ClientCache实例。
  2. 具体来说,看看Spring Boot for Pivotal GemFire的测试套件,从here开始。几乎所有这些测试类都使用ClientCache实例并测试Pivotal GemFire的各个方面,例如CQ或安全性等。
  3. 在某些测试类中,我使用了“模拟”ClientCache实例(例如,这个test class,特别是这个test configuration)。然而,在许多其他情况下,我使用了一个实时的GemFire ClientCache实例,用于example或这个test class,这很有趣,因为这个测试类甚至launches a serverClientCache实例(测试本身)连接。
  4. Spring Geode / Pivotal GemFire的Spring Boot中的所有测试协调逻辑都是由另一个新项目Spring Test for Apache Geode/Pivotal GemFire提供的。不幸的是,Apache Geode / Pivotal GemFire的Spring Test仍然主要是WIP,所以还没有文档。但是,我已经广泛使用这个新的测试项目来测试Apache Geode / Pivotal GemFire的Spring Boot。您将在扩展类中看到它的存在,例如ForkingClientServerIntegrationTestsSupport,等等。

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

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

希望这可以帮助!

问候,约翰


0
投票

对于您的单元测试,请使用其他配置文件。说application-ut.yaml并要求spring不要使用任何缓存实现库:

application-ut.yaml(在下面添加条目并删除为Gemfire配置的任何实现)

spring.cache.type : simple
© www.soinside.com 2019 - 2024. All rights reserved.