@Cacheable [Spring MVC] не работает

В моем весеннем проекте есть упаковка в виде баночки. Я использую Spring 4.3.2 В моей папке ресурсов. У меня есть файл конфигурации на основе xml: abc-servlet-context.xml

<?xml version = "1.0" encoding = "UTF-8"?>
<beans:beans xmlns:mvc = "http://www.springframework.org/schema/mvc"
         xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
         xmlns:beans = "http://www.springframework.org/schema/beans"
         xmlns:cache = "http://www.springframework.org/schema/cache"
         xmlns:p = "http://www.springframework.org/schema/p"
         xmlns:context = "http://www.springframework.org/schema/context"
         xsi:schemaLocation = "http://www.springframework.org/schema/mvc
                    http://www.springframework.org/schema/mvc/spring-mvc.xsd
                    http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans.xsd
                    http://www.springframework.org/schema/context
                    http://www.springframework.org/schema/context/spring-context.xsd
                    http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">

<cache:annotation-driven />

<context:component-scan base-package = "sayak.auth,
                        sayak.member"/>

<bean id = "cacheManager" class = "org.springframework.cache.support.SimpleCacheManager">
    <property name = "caches">
        <set>
            <bean class = "org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"
                    p:name = "memberInLastMonth"/>
        </set>
    </property>
</bean>

Я использую @Cacheable в методе dao, как показано ниже, а также аннотировал класс с помощью @Component:

@Cacheable(value = "memberInLastMonth" , key = "#authenticationId")
public List<AuthenticationAuditTrail> findByAuthenticationId(long authenticationId) {
//DB call to fetch data
}

Результат этого метода не кэшируется при вызове с тем же идентификатором аутентификации, я использовал простое утверждение, чтобы проверить его и не получить желаемый результат. Любая наводка будет полезна.

Метод тестирования для этого:

@Test
public void testMemberInLastMonth() {
Member member=getMember();
List<AuthenticationAuditTrail> records = getDAO()
    .findByAuthenticationId(member.getAuthentication().getId(),
        DateUtil.getPastMonth(1));
List<AuthenticationAuditTrail> cachedRecords = getDAO()
    .findByAuthenticationId(member.getAuthentication().getId(),
        DateUtil.getPastMonth(1));

for(int i=0;i<records.size();i++){
  AssertUtil.assertTrue(records.get(0) == cachedRecords.get(0));
}

}

Как вы вызываете метод в DAO, есть ли у вас тестовый пример, который вы можете опубликовать здесь для справки.

Himanshu Bhardwaj 02.05.2018 12:31

Вы говорите о вызове метода findByAuthenticationId или о логике внутри метода?

sayak 02.05.2018 12:32

Исследуйте @CachedResult.

Shanu Gupta 02.05.2018 12:33

@ShanuGupta Можете поделиться ссылками?

sayak 02.05.2018 12:36

@HimanshuBhardwaj "findByAuthenticationId" вызывается из другого класса, там я фактически просматриваю элементы списка и выполняю простой asertEquals

sayak 02.05.2018 12:39

@HimanshuBhardwaj, обновили вопрос с помощью метода тестирования по запросу

sayak 02.05.2018 13:11

findByAuthenticationId принимает 2 аргумента (id, date), вы уверены, что тестируете правильный метод. И никогда не используйте == для сравнения объектов, используйте .equals ()

Himanshu Bhardwaj 02.05.2018 13:18
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
101
0

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