如何以编程方式使用 JCache 并在后面使用 writw 配置 Hazelcast?

How to configure Hazelcast using JCache programmatically and using writw behind?

我正在尝试将我正在使用的 JCache 兼容技术添加到应用程序的当前实现中。目前,我已经能够使用 Apache Ignite 并让它与几个缓存一起工作,使用缓存存储的实现来读取和写入数据库。写入是使用 write behind 分批完成的。有些配置不是 JCache 的一部分,但我已经能够通过 Ignite 提供的 MutableConfiguration 的扩展 class 添加它。此外,我在没有任何 CacheProvider 或 CacheManager 的情况下使用 Spring 完成了此操作,因此在我的配置 class 中,我将缓存直接公开为 bean。我从接受我的配置 class 并允许我按名称获取缓存的 Ignite class 获取它们。 现在我正在尝试将此配置移植到 Hazelcast,但我在执行时遇到了问题。

首先,我一直没能找到一种方法来在没有 xml 文件的情况下以编程方式配置缓存。我发现的所有示例都使用 CacheManager,它采用带有此文件路径的 Properties 对象。如果我将路径传递给 class 而不是 xml,它会起作用吗?

我已经看到用于配置 HazelcastInstance 的 Config.class 接受 CacheSimpleConfig 但是,HazelcastInstance 没有 getCache 方法或类似方法。如果我以这种方式配置缓存,我如何才能从 HazelcastInstance 获取缓存?

最后一件事,我注意到没有与缓存配置后写相关的文档,仅针对映射。这不可能吗?缓存是否只允许写入?

谢谢!

  1. 因为 write-behind 不在当前的 JCache 规范中。它也不在 Hazelcast 中。 来自 Ignite 的文档,

"Ignite provides org.apache.ignite.cache.store.CacheStore interface which extends both, CacheLoader and CacheWriter."

这意味着您必须使用 Ignite 的专有 API 才能获得 write-behind 功能。恕我直言,使用 JCache 是没有用的,因为在这种情况下您将拥有供应商 lock-in。 JCache 规范的目标是结束所有专有缓存 APIs.

如果您想使用专有的 API,那么我建议您使用 Hazelcast 的 IMap 来获得 write-behind 功能。

  1. 您可以在创建缓存时以编程方式传递缓存配置;

Caching.getCachingProvider().getCacheManager().createCache("cache", cacheConfig);

下面的示例项目也很有用;

https://github.com/hazelcast/hazelcast-code-samples/tree/master/hazelcast-integration/spring-jcache

它显示了 XML 和 Java 配置。