![](/img/trans.png)
[英]Pivotal GemFire 9.3.0: Spring Data GemFire XML config in GemFire cluster
[英]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
),其中测试类中的每个测试用例方法将使用相同的ApplicationContext
和ClientCache
实例; 这是最理想的。
因此,我有两件事要与您分享:
首先,看看用于Apache Geode / Pivotal GemFire项目的新Spring Boot 。 文档在这里 。 我近一个月前宣布了该项目的可用性。 该项目从“客户端”的角度来使用Pivotal GemFire构建Spring Boot应用程序。 也就是说,默认情况下它为您提供了一个自动配置的ClientCache
实例。
具体来说,从此处开始, 查看 适用于Pivotal GemFire的测试套件的Spring Boot 。 几乎所有这些测试类都使用ClientCache
实例并测试Pivotal GemFire的各个方面,例如CQ或Security等。
在某些测试类中,我使用了“模拟” ClientCache
实例(例如,该测试类 ,尤其是该测试配置 )。 然而,在许多其他情况下,我用了一个活的GemFire ClientCache
例如,对于例如或者这个测试类 ,这是有趣,因为这个测试类,甚至启动一个服务器的ClientCache
实例(测试本身)来连接。
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.