Xmemcached与Spring 3.0的集成

昨天收到一个xmc的issue报告,大概的意思是将Xmemcached与spring 2.5集成没有任何问题,但是将spring升级到3.0就会抛出一个异常,并且spring容器无法正常启动,异常信息类似“Couldn't find a destroy method named 'shutdown' on bean XMemcachedClientFactoryBean”。更详细的情况可以看这里,这是这位朋友分析的结果,简单来说就是spring 3.0对于查找destroy method为空的情况处理不同了,过去是打个日志,现在是抛出一个异常。
   问题说完,这里主要是介绍下这个问题的解决方式,事实上Xmemcached有一个没有被文档化的Spring配置方式,没有写入文档的主要考虑是以为wiki介绍的第一种方式已经足够,而builder的方式相对繁琐一些。通过XmemcachedClientBuilder的这个factory bean的factory-method,也就是build方法来构建MemcachedClient,这就可以绕开spring 3.0的这个问题。一个示范配置如下:

<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作为一个factory-bean,接受一个InetSocketAddress列表作为构造函数传入,最后MemcachedClient就可以通过factory-method——也就是build方法创建了。

   多个节点情况下,可能你想设置权重,那么传入memcachedClientBuilder的第二个构造函数参数权重数组即可:

<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的权重设置为1,而localhost:12001的权重设置为2。除了这些配置外,XmemcachedClientBuilder还有其他选项,如配置一致性哈希算法、连接池等,完整的配置例子如下:

<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"/>

文章转自庄周梦蝶  ,原文发布时间 2009-12-24

时间: 2024-08-30 01:31:29

Xmemcached与Spring 3.0的集成的相关文章

在Spring 2.0中集成AspectJ

在Java语言中,从织入切面的方式上来看,存在三种织入方式:编译期织入.类加载期织入和运行期织入.编译期织入是指在Java编译期,采用特殊的编译器,将切面织入到Java类中:而类加载期织入则指通过特殊的类加载器,在类字节码加载到JVM时,织入切面:运行期织入则是采用CGLib工具或JDK动态代理进行切面的织入. AspectJ采用编译期织入和类加载期织入的方式织入切面,是语言级的AOP实现,提供了完备的AOP支持.它用AspectJ语言定义切面,在编译期或类加载期将切面织入到Java类中. 在低

详解Spring 3.0基于Annotation的依赖注入实现

简介:Spring 的依赖配置方式与 Spring 框架的内核自身是松耦合设计的.然而,直到 Spring 3.0 以前,使用 XML 进行依赖配置几乎是唯一的选择.Spring 3.0 的出现改变了这一状况,它提供了一系列 的针对依赖注入的注解,这使得 Spring IoC 在 XML 文件之外多了一种可行的选择.本文将详细介绍如 何使用这些注解进行依赖配置的管理. 使用 @Repository.@Service.@Controller 和 @Component 将类标识为 Bean Spri

Win7技巧:将IE11.0.3集成到Win7系统镜像

  参考教程: 1.如果用户还未下载IE11浏览器,参考下载大全:Win7版IE11浏览器正式版发布,下载对应的32位.64位版本浏览器. 2.下载Windows7平台更新KB2670838(该更新必不可少,点击这里下载),根据自己的Win7平台,下载对应的32位.64位版本. 3.下载对应32位/64位版本的KB2932269升级补丁(该更新带来最新版的IE11.0.3) FILE: IE11-Windows6.1-KB2932269-x86.msu SIZE: 28,766,616 byte

带高级搜索、书签功能、文件菜单等功能的Hibernate 3.2 Spring 2.0的chm格式Reference

http://yulimin.javaeye.com/blog/46928 我制作出了带高级搜索.书签功能.文件菜单等更多功能的.chm格式的文档了,需要的请下载最新版本的. 同时把原来的Spring 2.0的文档也重新制作了一下.:) Hibernate Reference 3.2 :http://www.javaeye.com/topics/download/072de89c-9b5c-4958-b274-c1beb0753e9b Spring Reference 2.0:http://ww

UI 2.0 有Bug,请问环信UI 3.0 如何集成?

问题描述 1. UI2.0集成,发语音和视频代码报错,提示方法找不到.  2. UI3.0我集成半天,各种报错,而且感觉耦合了2.0,请问3.0如何集成 3. 关于聊天室和群聊有没有UI,官方UI仅仅是单聊? 解决方案 第一个问题,应该是你项目里保留的是SDKLite.a这个库,实时语音和视频是SDK.a里的内容.第二个,环信的demo以官网为准.第三个,聊天室,群聊和单聊的UI是没有什么区别的,单聊就是传对方的username,群聊就是传groupId,聊天室就是传chatroomId.解决方

dubbo spring 2.X能升级到spring 3.0+

问题描述 dubbo spring 2.X能升级到spring 3.0+ 如何解决duboo 依赖的spring 2.X 升级到 3.0+ 时冲突问题?

spring 3.0应用

由于下一版本的rapid-framwork需要集成spring RESTful URL,所以研究了一下怎么搭建.并碰到了一下问题. springmvc 3.0 中增加 RESTful URL功能,构造出类似javaeye现在的URL. rest介绍 比如如下URL Java代码 /blog/1 HTTP GET => 得到id = 1的blog /blog/1 HTTP DELETE => 删除 id = 1的blog /blog/1 HTTP PUT => 更新id = 1的blog

Spring 2.0的新特性点评

Spring2.0的发布恐怕算得上2006年Java社区的一件大事了.在Spring2.0发布附带的文档里面对2.0新特性做了概要的介绍,2.0的新特性是自然是我们最关注的方面: 一.Spring的XML配置引入XML Schema语法简化配置 在Spring1.x系列中,bean的配置文件使用DTD,没有namespace的分隔.2.0的一个非常大的改进是引入了XML Schema的namespace,因而可以将bean的配置文件做大幅度的简化.这些简化包括了对bean属性的各种简化,AOP配

《Spring 3.0就这么简单》——第1章 快速入门 1.1 Spring概述

第1章 快速入门 本章通过一个简单的例子展现开发Spring Web应用的整体过程,通过这个实例,读者可以快速进入Spring Web应用的世界.实例应用按持久层.业务层和展现层进行组织,从底层DAO程序到Web展现程序逐层演进,一步步地搭建起一个完整的实例.通过本章的学习,读者可以独立完成一个典型的基于Spring的Web应用. 本章主要内容: Spring 概述 用户登录实例介绍 基于 Spring JDBC 的持久层实现 基于 Spring 声明式事务的业务层实现 基于 Spring MV