Spring Boot + Hazelcast MapStore 无法自动装配存储库

Fer*_*ano 5 spring autowired hazelcast spring-boot

我开始探索 Hazelcast 功能,并且一直尝试通过 HazelcastRepository 使用 MapStore 作为数据库的后写缓冲区。我的目标是在 MapStore 中使用 JpaRepository 来加载缓存和从缓存存储。

我正在使用 Spring Boot,经过一些研究后,我发现我可以使用 @SpringAware 在 MapStore 中自动装配我的存储库,但每次它到达那里时,我的 Bean 都会null得到一个NullPointerException. 即使经过大量不同的测试,我也无法让它工作,我无法在 MapStore 中自动装配我的 bean

启用 SpringAware 的配置有问题还是我看错地方了?

找到了这个 stackoverflow 帖子,它给了我线索,但我仍然无法弄清楚问题,因为大多数配置都是 xml 而不是 java。还发现了有关如何通过 Java 配置在 Hazelcast 中配置 SpringAware 的Github 问题

我在这个Git Repo Here中提交了我的示例代码。

调试器屏幕截图 null Bean

小智 6

在调查了提供的代码后,我注意到根据我在 Hazelcast 上发现的 GitHub 问题,@SpringAware 在默认情况下从未启用。该问题描述了 SpringAware 被禁用,因为它影响了性能,这使我转向另一个封闭式解决方案,使用 SpringManagedContext 通过代码启用注释避免使用 XML),但它仍然没有解决问题。

真正的解决方案在这里找到,将MapLoaderLifecycleSupport接口添加到您的 MapStore 实现中并实现 init 方法,如票证中所示:

@Override
public void init(HazelcastInstance hazelcastInstance, Properties properties, String mapName) {
    hazelcastInstance.getConfig().getManagedContext().initialize(this);
}
Run Code Online (Sandbox Code Playgroud)

这将强制在 MapStore 类中启用@SpringAware ,因此能够将任何 spring 组件自动装配到该类中,如下图所示。

工作-jpa-存储库-地图-存储-屏幕截图