ECM
ECM
总版主
总版主
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:884回复:0

Spring与memcache的结合配置

楼主#
更多 发布于:2016-08-17 23:08
1.安装memcache
1) 下载memcached服务端memcached-1.2.6-win32-bin.zip,地址:http://code.jellycan.com/memcached/
2) 下载java版客户端 java_memcached-release_2.6.1.zip
3) 解压缩memcached-1.2.6-win32-bin.zip到指定目录,例如:D:\memcached-1.2.6-win32 ,
在终端(即cmd命令行界面),执行'D:\memcached-1.2.6-win32\memcached.exe -d install'
安装,再执行:'D:\memcached\memcached.exe -d start'启动,这样memcache就会作为windows系统服务在每 次开机时启劢memcache服务。
2. 新建配置文件(spring级别)
新建名为spring-memcache.xml的spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
 <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>${memcache.server}</value>
            </list>
        </property>
        <property name="initConn">
            <value>${memcache.initConn}</value>
        </property>
        <property name="minConn">
            <value>${memcache.minConn}</value>
        </property>
        <property name="maxConn">
            <value>${memcache.maxConn}</value>
        </property>
        <property name="maintSleep">
          <value>${memcache.maintSleep}</value>
        </property>
        <property name="nagle">
            <value>${memcache.nagle}</value>
        </property>
        <property name="socketTO">
            <value>${memcache.socketTO}</value>
        </property>
    </bean>
    <bean id="memcachedClient" class="com.danga.MemCached.MemCachedClient">
        <constructor-arg>
            <value>neeaMemcachedPool</value>
        </constructor-arg>
    </bean>
</beans>
3. <!-- 配置spring的监听器,加载Spring配置文件-->
<context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>classpath:/spring/applicationContext-common.xml,classpath:/spring/spring-memcache.xml</param-value>
</context-param>


4.Web.xml文件中配置新建的文件
<!-- 配置spring的监听器,加载Spring配置文件-->
<context-param>
 <param-name>contextConfigLocation</param-name>
 <param-value>classpath:/spring/applicationContext-common.xml,classpath:/spring/spring-memcache.xml</param-value>
</context-param>
4. 修改spring配置文件
修改applicationContext-common.xml配置文件。
1).添加properties配置文件(memcache.properties)去配置memcache的属性。
<bean
 class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations">
   <list>
    <value>classpath:memcache.properties</value>
    <value>classpath:jdbc.properties</value>
   </list>
  </property>
 </bean>
2).添加bean去初始化我们自己的一个spring工具类,一会进行详细解释。
<bean id="springContextHolder" class="com.hxrainbow.crm.util.SpringContextHolder"/>
5. Memcache配置文件
memcache.properties文件内容如下:
mcache.server=127.0.0.1\:11211
memcache.initConn=20
memcache.minConn=10
memcache.maxConn=50
memcache.maintSleep=3000
memcache.nagle=false
memcache.socketTO=3000


6. 获得spring容器的工具类
/**
 * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext.
 **/
public class SpringContextHolder implements ApplicationContextAware{


 private static ApplicationContext applicationContext;


 /**
  * 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
  */
 public void setApplicationContext(ApplicationContext applicationContext) {
  SpringContextHolder.applicationContext = applicationContext;
 }
 /**
  * 取得存储在静态变量中的ApplicationContext.
  */
 public static ApplicationContext getApplicationContext() {
  checkApplicationContext();
  return applicationContext;
 }
 /**
  * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
  */
 @SuppressWarnings("unchecked")
 public static <T> T getBean(String name) {
  checkApplicationContext();
  return (T) applicationContext.getBean(name);
 }
 /**
  * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
  * 如果有多个Bean符合Class, 取出第一个.
  */
 @SuppressWarnings("unchecked")
 public static <T> T getBean(Class<T> clazz) {
  checkApplicationContext();
  Map beanMaps = applicationContext.getBeansOfType(clazz);
  if (beanMaps!=null && !beanMaps.isEmpty()) {
   return (T) beanMaps.values().iterator().next();
  } else{
   return null;
  }
 }
 private static void checkApplicationContext() {
  if (applicationContext == null) {
   throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
  }
 }
}
首先说一下ApplicationContextAware这个接口,这个接口中有一个方法:
void setApplicationContext(ApplicationContext applicationContext)
下面是这个方法的简单说明:
Set the ApplicationContext that this object runs in.Normally this call will be used to initialize the object.
我们在配置文件中配置了bean的初始化,然后他就可以用于获得spring容器中的东西了。
7.memcache的工具类
 public class MemcacheUtil {
 public static MemCachedClient getMemCachedClient() {
  return SpringContextHolder.getBean("memcachedClient");
}
}
}
}


8.junit测试类
 public class MemcacheUtilTest {
 static MemCachedClient memcachedClient;
 @BeforeClass
 public static void setUpBeforeClass() throws Exception {
  ApplicationContext ac=new ClassPathXmlApplicationContext(new String[]{"/spring/applicationContext-common.xml","/spring/spring-memcache.xml"});
 }
 @Test
 public void s() {
  MemCachedClient m=SpringContextHolder.getBean("memcachedClient");
  m.set("name", "yunhui");
  System.out.println(m.get("name"));
 }
}

 

 

 

 

 

 

 

异常中心网是一家专门收集整理程序员编程过程中遇到的常见异常(exception)以及各种异常问答中心的网站。异常中心网旨在,减少程序员在编码遇到异常,处理各种异常时间和痛苦,让程序员能更愉快的、快速的定位异常并查找对应的异常解决方案。异常中心网诚心打造最完美的编程社区为程序员用户服务,努力成为最好的程序员乐园程序员社区程序异常中心程序bug中心异常问答中心

 

喜欢0 评分0
游客

返回顶部