繁体   English   中英

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

[英]How to start Spring Boot app without depending on Pivotal GemFire cache

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

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

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

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

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

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

您还在测试用例方法上使用Spring的@DirtiesContext吗?

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

因此,我有两件事要与您分享:

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

  2. 具体来说,从此处开始, 查看 适用于Pivotal GemFire的测试套件的Spring Boot 几乎所有这些测试类都使用ClientCache实例并测试Pivotal GemFire的各个方面,例如CQ或Security等。

  3. 在某些测试类中,我使用了“模拟” ClientCache实例(例如,该测试类 ,尤其是该测试配置 )。 然而,在许多其他情况下,我用了一个活的GemFire ClientCache例如,对于例如或者这个测试类 ,这是有趣,因为这个测试类,甚至启动一个服务器ClientCache实例(测试本身)来连接。

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

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

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

希望这可以帮助!

问候,约翰

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

application-ut.yaml (在条目下方添加并删除您为Gemfire配置的所有实现)

spring.cache.type : simple

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM