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

我正在使用Spring Boot,并在进行了一些研究之后发现,我可以使用@SpringAware在MapStore中自动装配我的存储库,但是每次到达那里时,我的Bean是null,我得到一个NullPointerException
即使经过许多不同的测试,我也无法正常工作,我无法在MapStore中自动装配bean

启用S​​pringAware的配置有问题吗?还是我看错地方了?

找到This stackoverflow post并提供了线索,但是由于大多数配置都是xml而不是java,所以我仍然无法弄清楚这个问题。

在关于如何通过Java配置在Hazelcast中配置SpringAware的问题上找到了Github Issue

我在此Git Repo Here中提交了示例代码。

spring - Spring Boot + Hazelcast MapStore无法自动连线存储库-LMLPHP

最佳答案

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

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

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


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

working-jpa-repository-map-store-screenshot

07-24 14:43