Недействительное пространство имен с использованием простой пружины memcached

Кто-нибудь пытался сделать недействительным пространство имен memcached на основе метки времени? Например, мне нужно иметь пространство имен memcached, которое является меткой времени сервера tomcat, на котором размещены мои службы API. Мне нужно аннотировать вызовы моего метода, чтобы пространство имен было переменной (а не константой) и содержало временную метку запуска сервера.

@ReadThroughAssignCache(namespace = "api_divisions_", assignedKey="allDivisions")
public List<Division> getAllDivisions()
{
    List<Division> all = (List<Division>)getHibernateTemplate().find("from Division");
    return all;
}

Затем при каждом запуске сервера пространство имен в этом методе должно быть динамически установлено во время запуска сервера.

Обновление - я знаю, что есть обходной способ сделать это, используя javaassist и динамические аннотации, но я хотел лучшего подхода.

-Gotz

1 ответ

Решение

Пространство имен всегда является константой, вы не можете использовать переменную. Как я понимаю, вы хотите создать ключ кеша, используя время запуска сервера. Есть как минимум два способа, как это можно сделать. Первый: использовать @ReadThroughSingleCache

@ReadThroughSingleCache(namespace = "api_divisions_allDivisions")
public List<Division> getAllDivisions(@ParameterValueKeyProvider long startup)
{
  List<Division> all = (List<Division>)getHibernateTemplate().find("from Division");
  return all;
}

Второе: используйте пользовательский CacheKeyBuilder, который может добавлять метку времени к каждому ключу кэша.

Нужны ли старые значения перед запуском сервера? Если нет, то простое решение состоит в том, чтобы всегда использовать один и тот же ключ кеша и чистая memcached на сервере запускается.

Другие вопросы по тегам