Memcached学習ノート-第4部:Memcached Javaクライアント-gwalin(3)-spring統合
7187 ワード
Memcached Java Client Spring統合
プロジェクトがSpringをミドルウェアとして使用している場合は、Springの統合構成が役立ちます.
プロファイル
applicationContext-memcachedjavaclient.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd ">
<!--memcached SocketPool-->
<bean id="memcachedPool" class="com.danga.MemCached.SockIOPool" factory-method="getInstance" init-method="initialize" destroy-method="shutDown">
<constructor-arg><value>neeaMemcachedPool</value></constructor-arg>
<property name="servers">
<list>
<value>localhost:11211</value>
<value>localhost:11212</value>
<value>localhost:11213</value>
</list>
</property>
<!--
<property name="weights">
<value>1,1,1</value>
</property>-->
<property name="initConn">
<value>5</value>
</property>
<property name="minConn">
<value>5</value>
</property>
<property name="maxConn">
<value>250</value>
</property>
<property name="maintSleep">
<value>30</value>
</property>
<property name="nagle">
<value>false</value>
</property>
<property name="maxIdle">
<value>6000</value>
</property>
<property name="socketTO">
<value>3000</value>
</property>
</bean>
<!--memcached client-->
<bean id="memCachedClient" class="com.danga.MemCached.MemCachedClient">
<constructor-arg>
<value>neeaMemcachedPool</value>
</constructor-arg>
</bean>
<!--memcached ***end-->
<!-- -->
<bean id="memcachedClientService" class="org.acooly.memcached.memcachedjavaclient.MemcachedClientServiceJavaClientImpl">
<property name="memCachedClient" ref="memCachedClient" />
</bean>
</beans>
ビジネスコード
JVMコンテナを直接使用していたコードを微調整し、サービスメソッドで呼び出しの一例を変更してmemcachedクライアントインスタンスをSpring注入依存として取得します.サービスインタフェースクラス:MemcachedClientService
/**
* Memcached , , API ,
* flags , append,prepend,replace,incr,decr
*
* @author zhangpu
*
*/
public interface MemcachedClientService {
String get(String key);
CacheItem gets(String key);
boolean add(String key, String value);
boolean set(String key, String value);
boolean cas(String key, String value, long unique);
boolean delete(String key);
boolean flushAll();
}
サービス実装クラス:M e m c h e d ClientServiceJavaClientImpl
/**
* Memcached for java (SPING)
*
* @author zhangpu
*
*/
public class MemcachedClientServiceJavaClientImpl implements MemcachedClientService {
/** */
private MemCachedClient memCachedClient;
public void setMemCachedClient(MemCachedClient memCachedClient) {
this.memCachedClient = memCachedClient;
}
public boolean add(String key, String value) {
return memCachedClient.add(key, value);
}
public boolean cas(String key, String value, long unique) {
return memCachedClient.cas(key, value, unique);
}
public String get(String key) {
return (String) memCachedClient.get(key);
}
public CacheItem gets(String key) {
MemcachedItem item = memCachedClient.gets(key);
return new CacheItem(key, (String) item.getValue(), item.getCasUnique());
}
public boolean set(String key, String value) {
return memCachedClient.set(key, value);
}
public boolean delete(String key) {
return memCachedClient.delete(key);
}
public boolean flushAll() {
return memCachedClient.flushAll();
}
}
コード検証
public class MemcachedClientSerivceSpringTest {
public static void main(String[] args) throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "applicationContext-memcachedjavaclient.xml" });
MemcachedClientService memcachedClientService = (MemcachedClientService) context
.getBean("memcachedClientService");
String key = "keySpring";
String value = "i like Spring.";
String newValue = "i love Spring";
System.out.println("add: " + memcachedClientService.add(key, value));
System.out.println("set: " + memcachedClientService.set(key, newValue));
System.out.println("get: " + memcachedClientService.get(key));
CacheItem item = memcachedClientService.gets(key);
System.out.println("gets: " + item);
System.out.println("cas: " + memcachedClientService.cas(key, newValue, item.getUnique()));
System.out.println("del: " + memcachedClientService.delete(key));
}
}
実行結果:
add: true
set: true
get: i love Spring
gets: {key:keySpring,value:i love Spring,unique:2701285}
cas: true
del: true
構成の問題
コンフィギュレーションファイルでウェイトコンフィギュレーションにコメントしたのは、SocketPoolのウェイトパラメータがInteger[]であるため、SpringコンフィギュレーションにInteger[]パラメータをどのように注入するかは考えられませんでした.以前は自分のコードでしたが、文字列に変換してこの問題をスキップすることができます.
<property name="weights">
<value>1,1,1</value>
</property>
解決策: