Spring mvc и memcache
Я использую memcached, чтобы действовать в соответствии с тем, что они сказали по адресу: https://code.google.com/p/simple-spring-memcached/wiki/Getting_Started. Memcache на сервере, где это делается, я установил. Библиотека должна быть обязана иметь ваш проект. Но при запуске выводится.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultCache' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.google.code.ssm.CacheFactory]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/codehaus/jackson/Versioned
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBea n(AbstractAutowireCapableBeanFactory.java:965)
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.google.code.ssm.CacheFactory]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/codehaus/jackson/Versioned
я использую кеширование для такого метода
@ReadThroughSingleCache(namespace = "CplxObj", expiration = 0)
public List<Answer> showAnswer(int id){
и в dispatcher-servlet.xml добавьте это
<cache:annotation-driven />
<bean name="cacheManager" class="com.google.code.ssm.spring.SSMCacheManager">
<property name="caches">
<set>
<bean class="com.google.code.ssm.spring.SSMCache">
<constructor-arg name="cache" index="0" ref="defaultCache" />
<!-- 5 minutes -->
<constructor-arg name="expiration" index="1" value="300" />
<!-- @CacheEvict(..., "allEntries" = true) won't work because allowClear is false,
so we won't flush accidentally all entries from memcached instance -->
<constructor-arg name="allowClear" index="2" value="false" />
</bean>
</set>
</property>
<bean name="defaultCache" class="com.google.code.ssm.CacheFactory">
<property name="cacheName" value="defaultCache" />
<property name="cacheClientFactory">
<bean name="cacheClientFactory" class="com.google.code.ssm.providers.xmemcached.MemcacheClientFactoryImpl" />
</property>
<property name="addressProvider">
<bean class="com.google.code.ssm.config.DefaultAddressProvider">
<property name="address" value="199.26.84.24:11211" />
</bean>
</property>
<property name="configuration">
<bean class="com.google.code.ssm.providers.CacheConfiguration">
<property name="consistentHashing" value="true" />
</bean>
</property>
</bean>
Почему это проблема?
************************* после изменения этой ошибки происходят ******************** **********
Error creating bean with name 'cacheManager' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Cannot create inner bean 'com.google.code.ssm.spring.SSMCache#b53b32' of type [com.google.code.ssm.spring.SSMCache] while setting bean property 'caches' with key [0];
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.google.code.ssm.spring.SSMCache#b53b32' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Cannot resolve reference to bean 'defaultCache' while setting constructor argument;
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultCache' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Cannot create inner bean 'cacheClientFactory' of type [com.google.code.ssm.providers.spymemcached.MemcacheClientFactoryImpl] while setting bean property 'cacheClientFactory';
nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.google.code.ssm.providers.spymemcached.MemcacheClientFactoryImpl] for bean with name 'cacheClientFactory' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml];
nested exception is java.lang.ClassNotFoundException: com.google.code.ssm.providers.spymemcached.MemcacheClientFactoryImpl
Error creating bean with name 'com.google.code.ssm.spring.SSMCache#b53b32' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Cannot resolve reference to bean 'defaultCache' while setting constructor argument;
2 ответа
Какую версию Simple Spring Memcached (SSM) вы используете? Последние версии требуют Jackson 2.x, поэтому просто обновите SSM до 3.5.0.
Если вы используете maven для управления зависимостями, то артефакты будут загружены автоматически.
Кстати Кэшировать showAnswer
метод, вы должны аннотировать один из параметров метода с @ParameterValueKeyProvider
:
@ReadThroughSingleCache(namespace = "answers", expiration = 0)
public List<Answer> showAnswer(@ParameterValueKeyProvider int id){
И убедитесь, что этот метод вызывается другим весенним компонентом, самовывозом (через this
) не работают (не перехватываются / кэшируются).
Я не использую com.google.code.ssm.CacheFactory
но ошибка говорит:
NoClassDefFoundError: org/codehaus/jackson/Versioned
В нем говорится, что есть зависимость от библиотеки Джексона json 1.x, и ее нет в classpath. Попробуйте добавить библиотеку Jackson 1.x и посмотрите, что получится...