其他分享
首页 > 其他分享> > Spring Boot Hazelcast MapStore无法使用Autowire Repository

Spring Boot Hazelcast MapStore无法使用Autowire Repository

作者:互联网

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

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

这个配置有什么问题可以启用SpringAware,还是我在找错了地方?

找到This stackoverflow post,它给了我线索,但我仍然无法弄清楚问题,因为大多数配置是xml而不是java.

Github Issue中发现了如何通过Java配置在Hazelcast中配置SpringAware

我在Git Repo Here中提交了我的示例代码.

Debugger Screenshot null Bean

解决方法:

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

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

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

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

working-jpa-repository-map-store-screenshot

标签:spring,autowired,spring-boot-2,hazelcast
来源: https://codeday.me/bug/20190627/1303736.html