2016-11-15 16 views
0

Я пытаюсь запустить мое веб-приложение с функциями API REST и кешированием с помощью Memcached.Spring Caching не работает с Memcached

Весна не выдает ошибки при развертывании приложения. Но кеширование не работает. Я использовал spymemcached Java-клиент наряду с кэшированием Spring. Может кто-нибудь, пожалуйста, скажите мне, где я ошибаюсь? Это фрагмент моего корневого контекста

<cache:annotation-driven /> 
<bean class="net.spy.memcached.MemcachedClient"> 
    <constructor-arg ref="serverList" type="java.util.List" /> 
</bean> 
<context:component-scan base-package="com.restdemo.cache" /> 

<util:list id="serverList" value-type="java.net.InetSocketAddress"> 
    <bean class="java.net.InetSocketAddress"> 
     <constructor-arg value="127.0.0.1" type="java.lang.String" /> 
     <constructor-arg value="11211" type="int" /> 
    </bean> 
</util:list> 

<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"> 
    <property name="caches"> 
     <set> 
      <bean name="coursesCache" class="com.restdemo.cache.Memcache"> 
      </bean> 
     </set> 
    </property> 
</bean> 

Это моя реализация интерфейса кэша

public class Memcache implements Cache { 

@Autowired 
MemcachedClient cache; 

private final String name = ""; 

public void clear() { 
    cache.flush(); 

} 

public void evict(Object key) { 
    this.cache.delete(key.toString()); 

} 

public ValueWrapper get(Object key) { 
    Object value = null; 
    try { 
     value = cache.get(key.toString()); 
    } catch (final Exception e) { 
     e.printStackTrace(); 
    } 
    if (value == null) { 
     return null; 
    } 
    return new SimpleValueWrapper(value); 
} 

public <T> T get(Object arg0, Class<T> arg1) { 
    // TODO Auto-generated method stub 
    return null; 
} 

public <T> T get(Object arg0, Callable<T> arg1) { 
    // TODO Auto-generated method stub 
    return null; 
} 

public String getName() { 
    return name; 
} 

public Object getNativeCache() { 
    return cache; 
} 

public void put(Object key, Object value) { 
    cache.set(key.toString(), 7 * 24 * 3600, value); 

} 

public ValueWrapper putIfAbsent(Object arg0, Object arg1) { 
    // TODO Auto-generated method stub 
    return null; 
} 
} 

Я использовал аннотацию Cacheable в моем RestController следующим образом-

@GetMapping("/courses") 
@Cacheable("coursesCache") 
public List<Course> getCourses() { 
    return courseDAO.getAllCourses(); 
} 

Я уверен, что клиент Memcached создается просто отлично. Else Я получал ошибку, когда были созданы корневые компоненты контекста. Но тогда кеширование не работает. Любая помощь будет оценена.

ответ

0

Существует уже существующее решение, которое объединяет memcached (spymemcached или xmemcached) с абстракцией Spring Cache: Simple Spring Memcached. Подумайте об использовании этого.