Hazelcast弹簧配置
问题描述:
什么在所述applicationContext
VS是在<hz:config>
段中定义的一个创建<hz:map>
标签之间的差异?Hazelcast弹簧配置
如何关联?
我知道<hz:map>
在applicationContext
会导致创建一个IMap类型的bean,当没有<hz:map>
时,它将不会创建。
但什么是有一个bean定义时,下面的配置做的,随后的情况下有hazelcast配置同名<hz:map>
?
<hz:map id="loggedInUserMap" name="loggedInUserMap" instance-ref="ipds" scope="singleton" />
<hz:hazelcast id="ipds">
<hz:config>
<hz:instance-name>${hz.instance.name}</hz:instance-name>
<hz:group name="${hz.group.name}" password="${hz.group.password}"/>
<hz:map name="loggedInUserMap" backup-count="1" eviction-policy="NONE" in-memory-format="BINARY">
<hz:near-cache time-to-live-seconds="0" max-idle-seconds="60"
eviction-policy="LRU" max-size="5000" invalidate-on-change="true"/>
</hz:map>
</hz:config>
</hz:hazelcast>
答
<hz:map id="loggedInUserMap" name="loggedInUserMap"
instance-ref="ipds" scope="singleton" />
这将导致创建一个名为豆 'loggedInUserMap'(由id
属性指向)。 Hazelcast上下文中的地图名称也将“loggedInUserMap”(由name
属性指出)。
A <hz:map>
<hz:config>
内部的标记是指在创建IMap
(这里称为MapConfig
)时可以使用的特定配置。在hazelcast.xml中可能有很多这样的MapConfigs
。一个MapConfig
也可以由多个IMaps共享,并使用通配符*
。
如果您有一个与name
匹配的MapConfig,它与hazelcast上下文中使用的地图“名称”匹配,那么将在创建该IMap对象时使用该配置。你的情况是“loggedInUserMap”。
如果没有找到,MapConfig名称为“默认”将被用于创建IMAP对象。
如果没有找到,则默认对IMAP将同时创建IMAP对象使用。
我觉得下面的例子将事情了明确分类。
样本配置
<hz:config>
<hz:instance-name>${hz.instance.name}</hz:instance-name>
<hz:group name="${hz.group.name}" password="${hz.group.password}"/>
<hz:map name="default"
backup-count="2" max-size="0"
time-to-live-seconds="25" eviction-percentage="30"
eviction-policy="NONE"/>
<hz:map name="userMap"
backup-count="2" max-size="0"
time-to-live-seconds="6000" eviction-percentage="30"
eviction-policy="NONE"/>
<hz:map name="FruitMap*"
backup-count="2" max-size="0"
time-to-live-seconds="10" eviction-percentage="30"
eviction-policy="NONE"/>
</hz:config>
<hz:map instance-ref="ipds" id="userMapSpringId" name="userMap" />
<hz:map instance-ref="ipds" id="mangoMapSpringId" name="FruitMap1" />
<hz:map instance-ref="ipds" id="appleMapSpringId" name="FruitMap2" />
<hz:map instance-ref="ipds" id="alientFruitMapSpringId" name="AlienFruit" />
示例代码
IMap map1 = (IMap) ctx.getBean("userMapSpringId");
// map1 will make use of the configuration with name "userMap"
IMap map2 = (IMap) ctx.getBean("mangoMapSpringId");
IMap map3 = (IMap) ctx.getBean("appleMapSpringId");
// Here two different IMaps objects are created.
// However both map2 and map3 will make use of the same configuration "FruitMap*".
IMap map4 = (IMap) ctx.getBean("alientFruitMapSpringId");
// In the case of map4, there is no configuration which matches its hazelcast name
// (AlienFruit). Hence it will make use of the configuration with name "default".
希望与评论的代码段是不言自明。
谢谢。可能是hazelcast的人可以修改xml标签,使其自我解释。 – Manish
诚然,重命名的xml标记可能会在此时创建兼容性问题(尽管很小)。但是,可以修改文档以清楚地陈述事实,可以举一个例子。 – Dinesh