昨天收到一个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"
/>
分享到:
相关推荐
spring+xmemcached aop切面 需要xmemcached-1.2.5+spring-2.5.6 class="net.rubyeye.xmemcached.utils.XMemcachedClientFactoryBean" destroy-method="shutdown"> ${XMemcached_servers} <!-- ...
NULL 博文链接:https://snowolf.iteye.com/blog/1612207
Ehcache、xmemcached、redis 整合spring注解demo
红est任务执行者Kestrel + XMemcached + Spring TaskExecutor
想要学习Memcached与spring集成的
阿里ocs的java客户端demo,我测试了xmemcached和spymemcached。两个都可用,但xmc可以交由spring管理client对象的生命周期,而spymc却是spring...ocs spring xmemcached spymemcached(本机测试用memcached1.4.13版本)
NULL 博文链接:https://xly1981.iteye.com/blog/1809837
xmemcached-1.2.4的官方源码。 xmemcached XMemcached is a high performance, easy to use blocking multithreaded memcached client in java. It's nio based (using my opensource nio framework :yanf4j), ...
测试类包括Xmemcached客户端与memcached client for java两者,可运行比较性能。 XMemcached简介: XMemcached是基于 java nio的Memcached客户端,java nio相比于传统阻塞 io 模型来说,有 效率高(特别在高并发下...
spring集成memcached
xmemcached-1.2.6.2
repository\com\googlecode\xmemcached\xmemcached 2.4.6
memcache 分布式缓存,客户端,速度虽不比ehcache快。
xmemcached中文开发手册,提供的版本较老,但针对2.0的版本次文档同样适用,可以入门
memcache.spymemcached,和xmemcached 三种缓存实例
xmemcached.chm帮助文档
xmemcached-1.4.3.jar
官方中文手册,各种开发实例,集成spring等详尽配置信息,不错的资料!
memcached 客户端 xmemcached jar 包,xmemcached 源文件 及 api