java - 如何在不依赖 Pivotal GemFire 缓存的情况下启动 Spring Boot 应用程序
问题描述
我有一个ClientCache
配置了 Pivotal GemFire 实例及其相应域对象的 Spring Boot 应用程序。我也在使用 Spring Boot Test 进行单元测试。对于每个测试用例执行,无论是通过类还是 Maven 构建,ApplicationContext
如果 GemFire 缓存关闭,Spring 将无法加载。
如何在不依赖 GemFire 缓存的情况下启动 Spring Boot 应用程序?
解决方案
我不确定我是否完全按照您的意思...
“对于每个测试用例执行,无论是通过类还是 Maven 构建,
ApplicationContext
如果 GemFire 缓存关闭,Spring 将无法加载。 ”
您是否正在ClientCache
为测试类中的每个测试用例(方法)重新创建实例?
如果是这样,那么这可能会很棘手,因为即使在调用之后ClientCache.close()
,GemFire 也可能没有完全“关闭”并释放ClientCache
实例使用的所有资源。但是,通常这不会阻止ApplicationContext
在后续测试用例执行时重新创建 Spring。它通常只会导致后续测试失败,因为ClientCache
实例是脏的或陈旧的,保留了前一个(或最后一个)测试用例执行的旧状态。
@DirtiesContext
您是否也在您的测试用例方法中使用了 Spring ?
通常,明智的做法是循环每个测试类的ApplicationContext
and GemFire 缓存实例(例如ClientCache
),其中测试类中的每个测试用例方法将使用相同的ApplicationContext
实例ClientCache
;这是最理想的。
有了这个,我有两件事要和你分享:
首先,看看新的Spring Boot for Apache Geode/Pivotal GemFire项目。文档在这里。我在将近一个月前宣布了这个项目的可用性。该项目从“客户端”的角度使用 Pivotal GemFire 构建 Spring Boot 应用程序。也就是说,它
ClientCache
默认为您提供一个自动配置的实例。具体来说,看看Spring Boot for Pivotal GemFire 的测试套件,从这里开始。几乎所有这些测试类都使用一个
ClientCache
实例并测试 Pivotal GemFire 的各个方面,例如 CQ 或安全性等。在某些测试类中,我使用了“模拟”
ClientCache
实例(例如,这个测试类,特别是这个测试配置)。然而,在许多其他情况下,我使用了一个实时的 GemFireClientCache
实例,例如这个测试类,这很有趣,因为这个测试类甚至启动了一个服务器供ClientCache
实例(测试本身)连接到。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 GemFire和Spring Test for Pivotal GemFire项目作为编写更有效的单元和集成测试的指南。
最后,如果您有一个示例 GitHub 存储库可以重现您的问题,我可以帮助您指出正确的方向。
希望这可以帮助!
问候,约翰
推荐阅读
- acl - Varnish:多个 IP 与使用波浪号的 ACL 进行比较
- xquery - 检查 XQuery 查询的类型
- mysql - MySQL Workbench 无法连接到服务器 (Windows)
- javascript - 如何在 Angular 9 中使用 Browser-Update.org?
- python - 如何保存随机输出以在 python 的另一个函数中使用它
- ios - AVAggregateAssetDownloadTask 在进入后台时停止发送更新(可能停止下载)
- xml - 在任何地方使用自动化读取 xml 文件中的特定值
- c++ - 使用类模板“迭代器”需要模板参数
- python - Python被精确的子字符串分割?
- javascript - 执行上下文已被销毁 Puppeteer