开发者社区> 问答> 正文

Spring中集成Hazelcast遇到的问题

最近在cms项目中出现了一个bug,该项目是集群部署的,程序中使用了缓存(非分布式缓存),导致多台服务器信息不一致的情况,在网上搜了下,发现Hazelcast可以很容易解决这样的问题,后来了解Hazelcast后,在Spring中集成了Hazelcast,可发现没有像文档中说的那样简单,老是出现问题,出现的第一个问题,就是下面一段代码出现注入的参数类型不一致问题:

<bean id="instance" class="com.hazelcast.core.Hazelcast" factory-method="newHazelcastInstance">
    <constructor-arg>
        <bean class="com.hazelcast.config.Config">
            <property name="groupConfig">
                <bean class="com.hazelcast.config.GroupConfig">
                    <property name="name" value="dev"/>
                    <property name="password" value="pwd"/>
                </bean>
            </property>
            <!-- and so on ... -->
        </bean>
    </constructor-arg>
</bean>
<bean id="map" factory-bean="instance" factory-method="getMap">
    <constructor-arg value="map"/>
</bean>

后来为了实例化上面这个类,我自己封装到了代码中,没有使用上面的配置文件,这个问题解决后,后面又写了一些测试代码,想测试一下分布式数据共享是否真能起作用,到最后程序部署完毕并测试的时候,发现多台服务器之间相同的变量数据还是不一致,不知道是怎么回事?当然我写了一个简单的demo测试是成功的,希望高手给我解答一下,纠结了很长时间,非常感谢!!!

展开
收起
a123456678 2016-03-13 13:42:22 2229 0
1 条回答
写回答
取消 提交回答
  • hazelcast的使用有点特殊。如果修改了一个对象的内容,必须put回到原来的集合中,才能起作用。

    看下面的code.

    Map map = ...

    map.put("1", new MyObj());

    map.get("1").setName("test");

    map.get("1").getName();//对于普通的集合来说,这应该有值,但是hazelcast的没有。

    必须hazelcast.put("1",obj)之后修改才能起作用,

    2019-07-17 19:02:28
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载