最近在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测试是成功的,希望高手给我解答一下,纠结了很长时间,非常感谢!!!
hazelcast的使用有点特殊。如果修改了一个对象的内容,必须put回到原来的集合中,才能起作用。
看下面的code.
Map map = ...
map.put("1", new MyObj());
map.get("1").setName("test");
map.get("1").getName();//对于普通的集合来说,这应该有值,但是hazelcast的没有。
必须hazelcast.put("1",obj)之后修改才能起作用,
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。