Hazelcast Spring 配置

6
<hz:map>标记在applicationContext中创建与在<hz:config>段中定义的有什么区别?它们之间有什么关系?当在applicationContext中存在<hz:map>时,会创建一个IMap类型的bean,否则不会。但是,当已经定义了一个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>
1个回答

3
<hz:map id="loggedInUserMap" name="loggedInUserMap" 
            instance-ref="ipds" scope="singleton" />

这将创建一个名为“loggedInUserMap”的bean(由id属性指向)。在Hazelcast上下文中,该映射的名称也将是“loggedInUserMap”(由name属性指向)。 <hz:config>内部的<hz:map>标签引用了特定的配置,可用于创建IMap(以下简称MapConfig)。在hazelcast.xml中可能有许多这样的MapConfigs。一个MapConfig也可以使用通配符*共享多个IMaps。
如果您有一个与在Hazelcast上下文中使用的地图“名称”匹配的name的MapConfig,则在创建该IMap对象时将使用该配置。在您的情况下,它是“loggedInUserMap”。
如果未找到,则将使用名称为“default”的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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接