2015-10-20 331 views
6

什麼在所述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> 

回答

3
<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". 

希望與評論的代碼段是不言自明。

+0

謝謝。可能是hazelcast的人可以修改xml標籤,使其自我解釋。 – Manish

+0

誠然,重命名的xml標記可能會在此時創建兼容性問題(儘管很小)。但是,可以修改文檔以清楚地陳述事實,可以舉一個例子。 – Dinesh