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

时间:2018-07-25 03:49:41

标签: java spring spring-boot geode spring-data-gemfire

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

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

2 个答案:

答案 0 :(得分: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. 具体地说,请看一下从here开始的 Pivotal GemFire的测试套件的Spring Boot。几乎所有这些测试类都使用ClientCache实例并测试Pivotal GemFire的各个方面,例如CQ或Security等。

  3. 在某些测试类中,我使用了“模拟” ClientCache实例(例如,这个test class,尤其是这个test configuration)。但是,在许多其他情况下,我为example或此test class使用了一个实时GemFire ClientCache实例,这很有趣,因为该测试类甚至为{{ 1}}实例(测试本身)进行连接。

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

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

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

希望这会有所帮助!

关于, 约翰

答案 1 :(得分:0)

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

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

spring.cache.type : simple