簡體   English   中英

Hazelcast彈簧配置

[英]Hazelcast spring configuration

什么是在applicationContext創建的<hz:map>標簽與<hz:config>段中定義的標簽之間的區別?

它們有什么關系?

我知道applicationContext中的<hz:map>會導致創建一個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”的bean(由id屬性指向)。 Hazelcast上下文中的地圖名稱也將是“loggedInUserMap”(由name屬性指向)。

<hz:config> A <hz:map>標記是指在創建IMap可以使用的特定配置(此處稱為MapConfig )。 MapConfigs中可能有許多這樣的MapConfigs。 一個MapConfig也可以使用通配符*由多個IMap共享。

如果您的MapConfig的name與hazelcast上下文中使用的地圖“name”匹配,則在創建該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".

我希望帶注釋的代碼片段不言自明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM