<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢(mèng)蝶

    生活、程序、未來(lái)
       :: 首頁(yè) ::  ::  :: 聚合  :: 管理

    Xmemcached與Spring 3.0的集成

    Posted on 2009-12-24 01:51 dennis 閱讀(4879) 評(píng)論(1)  編輯  收藏 所屬分類: javamy open-source
        昨天收到一個(gè)xmc的issue報(bào)告,大概的意思是將Xmemcached與spring 2.5集成沒(méi)有任何問(wèn)題,但是將spring升級(jí)到3.0就會(huì)拋出一個(gè)異常,并且spring容器無(wú)法正常啟動(dòng),異常信息類似“Couldn't find a destroy method named 'shutdown' on bean XMemcachedClientFactoryBean”。更詳細(xì)的情況可以看這里,這是這位朋友分析的結(jié)果,簡(jiǎn)單來(lái)說(shuō)就是spring 3.0對(duì)于查找destroy method為空的情況處理不同了,過(guò)去是打個(gè)日志,現(xiàn)在是拋出一個(gè)異常。
       問(wèn)題說(shuō)完,這里主要是介紹下這個(gè)問(wèn)題的解決方式,事實(shí)上Xmemcached有一個(gè)沒(méi)有被文檔化的Spring配置方式,沒(méi)有寫入文檔的主要考慮是以為wiki介紹的第一種方式已經(jīng)足夠,而builder的方式相對(duì)繁瑣一些。通過(guò)XmemcachedClientBuilder的這個(gè)factory bean的factory-method,也就是build方法來(lái)構(gòu)建MemcachedClient,這就可以繞開spring 3.0的這個(gè)問(wèn)題。一個(gè)示范配置如下:

    <bean name="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder">
            
    <constructor-arg>
                
    <list>
                    
    <bean class="java.net.InetSocketAddress">
                        
    <constructor-arg>
                            
    <value>localhost</value>
                        
    </constructor-arg>
                        
    <constructor-arg>
                            
    <value>12000</value>
                        
    </constructor-arg>
                    
    </bean>
                
    </list>
            
    </constructor-arg>
        
    </bean>
        
    <bean name="memcachedClient" factory-bean="memcachedClientBuilder"
            factory-method
    ="build" destroy-method="shutdown" />

       memcachedClientBuilder作為一個(gè)factory-bean,接受一個(gè)InetSocketAddress列表作為構(gòu)造函數(shù)傳入,最后MemcachedClient就可以通過(guò)factory-method——也就是build方法創(chuàng)建了。

       多個(gè)節(jié)點(diǎn)情況下,可能你想設(shè)置權(quán)重,那么傳入memcachedClientBuilder的第二個(gè)構(gòu)造函數(shù)參數(shù)權(quán)重?cái)?shù)組即可:
    <bean name="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder">
            
    <constructor-arg>
                
    <list>
                    
    <bean class="java.net.InetSocketAddress">
                        
    <constructor-arg>
                            
    <value>localhost</value>
                        
    </constructor-arg>
                        
    <constructor-arg>
                            
    <value>12000</value>
                        
    </constructor-arg>
                    
    </bean>
                    
    <bean class="java.net.InetSocketAddress">
                        
    <constructor-arg>
                            
    <value>localhost</value>
                        
    </constructor-arg>
                        
    <constructor-arg>
                            
    <value>12001</value>
                        
    </constructor-arg>
                    
    </bean>
                
    </list>
            
    </constructor-arg>
            
    <constructor-arg>
                
    <list>
                    
    <value>1</value>
                    
    <value>2</value>
                
    </list>
            
    </constructor-arg>
        
    </bean>
        
    <bean name="memcachedClient" factory-bean="memcachedClientBuilder"
            factory-method
    ="build" destroy-method="shutdown" />


    上面的例子將localhost:12000的權(quán)重設(shè)置為1,而localhost:12001的權(quán)重設(shè)置為2。除了這些配置外,XmemcachedClientBuilder還有其他選項(xiàng),如配置一致性哈希算法、連接池等,完整的配置例子如下:

    <bean name="memcachedClientBuilder" class="net.rubyeye.xmemcached.XMemcachedClientBuilder">
                    
    <!-- XMemcachedClientBuilder have two arguments.First is server list,and second is weights array. -->
                    
    <constructor-arg>
                            
    <list>
                                    
    <bean class="java.net.InetSocketAddress">
                                            
    <constructor-arg>
                                                    
    <value>localhost</value>
                                            
    </constructor-arg>
                                            
    <constructor-arg>
                                                    
    <value>12000</value>
                                            
    </constructor-arg>
                                    
    </bean>
                                    
    <bean class="java.net.InetSocketAddress">
                                            
    <constructor-arg>
                                                    
    <value>localhost</value>
                                            
    </constructor-arg>
                                            
    <constructor-arg>
                                                    
    <value>12001</value>
                                            
    </constructor-arg>
                                    
    </bean>
                            
    </list>
                    
    </constructor-arg>
                    
    <constructor-arg>
                            
    <list>
                                    
    <value>1</value>
                                    
    <value>2</value>
                            
    </list>
                    
    </constructor-arg>
                    
    <property name="connectionPoolSize" value="2"></property>
                    
    <property name="commandFactory">
                            
    <bean class="net.rubyeye.xmemcached.command.TextCommandFactory"></bean>
                    
    </property>
                    
    <property name="sessionLocator">
                            
    <bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator"></bean>
                    
    </property>
                    
    <property name="transcoder">
                            
    <bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />
                    
    </property>
            
    </bean>
            
    <!-- Use factory bean to build memcached client -->
            
    <bean name="memcachedClient" factory-bean="memcachedClientBuilder"
                    factory-method
    ="build" destroy-method="shutdown"/>



    主站蜘蛛池模板: 国产精品免费久久久久久久久| 亚洲精品中文字幕无乱码| 亚洲毛片不卡av在线播放一区| 亚洲av麻豆aⅴ无码电影| 波多野结衣免费视频观看| 免费国产美女爽到喷出水来视频| 日韩视频在线免费| 国产日产成人免费视频在线观看| 免费a级毛片永久免费| 免费a在线观看播放| 亚洲福利精品一区二区三区 | 精品一区二区三区免费毛片| 理论亚洲区美一区二区三区| 深夜A级毛片视频免费| 男女污污污超污视频免费在线看| 亚洲视频在线免费| 免费网站观看WWW在线观看| 嫩草在线视频www免费观看 | AAAAA级少妇高潮大片免费看| 中文字幕在线视频免费观看| 日本高清免费观看| 国产一卡二卡四卡免费| 日韩一区二区在线免费观看 | 国产一级理论免费版| 亚洲第一区精品观看| 亚洲AV成人精品网站在线播放| 亚洲欧洲国产精品久久| 亚洲日韩精品无码专区| 一级A毛片免费观看久久精品 | 国产亚洲精品美女久久久久 | 国产无遮挡无码视频免费软件| 最近2022中文字幕免费视频| 国产啪精品视频网免费| 国产成人免费手机在线观看视频 | www亚洲精品少妇裸乳一区二区| 在线播放亚洲第一字幕| 亚洲美女人黄网成人女| 久久亚洲精品成人无码| 中国好声音第二季免费播放| 亚洲美女免费视频| 亚洲国产精品日韩专区AV|