Spring ehcache没有这样的方法错误

时间:2015-01-27 10:10:01

标签: java spring spring-mvc ehcache

Caused by: java.lang.NoSuchMethodError: org.springframework.cache.ehcache.EhCach
eFactoryBean.setMaxEntriesLocalHeap(J)V


    Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.cache.ehcache.EhCacheFactoryBean]:
     Constructor threw exception; nested exception is java.lang.NoSuchMethodError: org.springframework
    .cache.ehcache.EhCacheFactoryBean.setMaxEntriesLocalHeap(J)V
            at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163)
            at org.springframework.beans.factory.support.SimpleInstantiationStrategy
    .instantiate(SimpleInstantiationStrategy.java:89)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBean
    Factory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1086)
            ... 192 more
    Caused by: java.lang.NoSuchMethodError: org.springframework.cache.ehcache.EhCach
    eFactoryBean.setMaxEntriesLocalHeap(J)V
            at org.springframework.cache.ehcache.EhCacheFactoryBean.<init>(EhCacheFa
    ctoryBean.java:101)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

            at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct
    orAccessorImpl.java:62)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingC
    onstructorAccessorImpl.java:45)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
            at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:1
    47)
            ... 194 more

6 个答案:

答案 0 :(得分:3)

错误似乎很清楚

您使用的

Version 2.5没有方法。

EhCacheFactoryBean的

Version 4.1似乎有方法。

我猜你混合了不兼容的罐子版本。

答案 1 :(得分:1)

setMaxEntriesLocalHeap中使用的方法EhCacheFactoryBean位于父类CacheConfiguration中,您可以看到源代码:

public class EhCacheFactoryBean extends CacheConfiguration implements FactoryBean<Ehcache>, BeanNameAware, InitializingBean { }

未找到可能由CacheConfiguration没有自动连接到bean工厂引起的,你可以检查一下。

答案 2 :(得分:0)

您尝试使用的lib中应该存在版本不匹配。扯下jar并使用jdgui查看该类是否可用。

这里的问题是你在模块中使用的lib,你引用的lib是不同的,因此是例外。

答案 3 :(得分:0)

需要的Jar文件: - spring-security 2.0.3和spring 2.5.5以及echeche 1.2.4  ehcache config

 <ehcache>
 <diskStore path="java.io.tmpdir"/>
 <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"/>
</ehcache>

Spring config:

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheMa nagerFactoryBean">
<property name="configLocation" value="classpath:ehcache-failsafe.xml" />
</bean>
<bean id="userCacheBackend" class="org.springframework.cache.ehcache.EhCacheFa ctoryBean">
<property name="cacheManager" ref="cacheManager" />
<property name="cacheName" value="userCache" />
</bean>
<bean id="userCache" class="org.springframework.security.providers.dao. cache.EhCacheBasedUserCache">
<property name="cache" ref="userCacheBackend" />
</bean>

答案 4 :(得分:0)

使用mvn dependency:tree并检查org.springframework:spring-context-support:jar的版本是否比3.2.13.RELEASE更新。

如果是这样意味着您需要在2.5及更高版本中使用EhCache。如果你不能,例如因为你正在使用需要2.4.x ehCache的hibernate-ehcache那么唯一的方法是使用旧的spring-context-support:

 <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>3.2.13.RELEASE</version><!-- wersja wymagana przez ehcache-core 2.4.8-->
    <exclusions>
      <exclusion>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
      </exclusion>
      <exclusion>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
      </exclusion>
      <exclusion>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
      </exclusion>
      <exclusion>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
      </exclusion>
      <exclusion>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
      </exclusion>
    </exclusions>
  </dependency>

它应该适用于较新的弹簧。我已经排除了依赖项以防止下载它们的旧版本。

答案 5 :(得分:0)

我遇到了类似的问题,并通过升级到ehcache版本2.7.1解决了该问题