为什么没有找到bean(Spring4.x(Ehcache3.x、ApacheTomcat7)

qncylg1j  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(439)

尝试向现有的Spring4.3(非springboot)应用程序添加缓存
使用ehcache 3.5,会让人困惑。
beans.xml文件

  1. <bean id="ehCacheManager" class="org.springframework.cache.jcache.JCacheCacheManager">
  2. <property name="cacheManager">
  3. <bean class="org.springframework.cache.jcache.JCacheManagerFactoryBean"
  4. jsr107:cacheManagerUri="classpath:ehcache.xml"/>
  5. </property>
  6. </bean>

mycacheservice.java文件

  1. package com.me;
  2. import org.springframework.cache.CacheManager;
  3. import org.springframework.cache.annotation.Cacheable;
  4. import org.springframework.cache.annotation.EnableCaching;
  5. import org.springframework.cache.jcache.JCacheCacheManager;
  6. import org.springframework.context.ApplicationContext;
  7. import org.springframework.context.annotation.AnnotationConfigApplicationContext;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.stereotype.Component;
  11. import java.net.URISyntaxException;
  12. @Component
  13. public class MyCacheService {
  14. private static int value = 7;
  15. @Cacheable("cache")
  16. public int incValue() {
  17. return value++;
  18. }
  19. }

pom.xml文件

  1. <dependency>
  2. <groupId>org.ehcache</groupId>
  3. <artifactId>ehcache</artifactId>
  4. <version>3.5.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>javax.cache</groupId>
  8. <artifactId>cache-api</artifactId>
  9. <version>1.1.0</version>
  10. </dependency>

ehcache.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <config
  3. xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
  4. xmlns:jsr107='http://www.ehcache.org/v3/jsr107'
  5. xmlns='http://www.ehcache.org/v3'
  6. xsi:schemaLocation="
  7. http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.4.xsd
  8. http://www.ehcache.org/v3/jsr107 http://www.ehcache.org/schema/ehcache-107-ext-3.4.xsd">
  9. <service>
  10. <jsr107:defaults enable-management="false" enable-statistics="true"/>
  11. </service>
  12. <cache alias="cache">
  13. <resources>
  14. <heap unit="entries">2000</heap>
  15. </resources>
  16. </cache>
  17. </config>

在课堂上,

  1. @Autowired
  2. MyCacheService myCacheService;

在方法中,如果类,

  1. System.out.println("FOO -------------" + myCacheService.incValue());

错误:

  1. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ehCacheManager' defined in ServletContext resource [/WEB-INF/cxf-beans.xml]: Cannot create inner bean 'org.springframework.cache.jcache.JCacheManagerFactoryBean#4b6fd0' of type [org.springframework.cache.jcache.JCacheManagerFactoryBean] while setting bean property 'cacheManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cache.jcache.JCacheManagerFactoryBean#4b6fd0' defined in ServletContext resource [/WEB-INF/cxf-beans.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.terracotta.statistics.StatisticsManager.createPassThroughStatistic(Ljava/lang/Object;Ljava/lang/String;Ljava/util/Set;Lorg/terracotta/statistics/StatisticType;Ljava/util/function/Supplier;)V
  2. at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:313)
  3. at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:122)
  4. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1537)
  5. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1284)
  6. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
  7. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
  8. at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)
  9. at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
  10. at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)
  11. at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
  12. at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
  13. ... 62 more
  14. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cache.jcache.JCacheManagerFactoryBean#4b6fd0' defined in ServletContext resource [/WEB-INF/cxf-beans.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.terracotta.statistics.StatisticsManager.createPassThroughStatistic(Ljava/lang/Object;Ljava/lang/String;Ljava/util/Set;Lorg/terracotta/statistics/StatisticType;Ljava/util/function/Supplier;)V
  15. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1634)
  16. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
  17. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
  18. at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:299)
  19. ... 72 more
  20. Caused by: java.lang.NoSuchMethodError: org.terracotta.statistics.StatisticsManager.createPassThroughStatistic(Ljava/lang/Object;Ljava/lang/String;Ljava/util/Set;Lorg/terracotta/statistics/StatisticType;Ljava/util/function/Supplier;)V
  21. at org.ehcache.impl.internal.store.heap.OnHeapStore.<init>(OnHeapStore.java:265)
  22. at org.ehcache.impl.internal.store.heap.OnHeapStore$Provider.createStoreInternal(OnHeapStore.java:1612)
  23. at org.ehcache.impl.internal.store.heap.OnHeapStore$Provider.createStore(OnHeapStore.java:1579)
  24. at org.ehcache.impl.internal.store.heap.OnHeapStore$Provider.createStore(OnHeapStore.java:1560)
  25. at org.ehcache.core.EhcacheManager.getStore(EhcacheManager.java:506)
  26. at org.ehcache.core.EhcacheManager.createNewEhcache(EhcacheManager.java:316)
  27. at org.ehcache.core.EhcacheManager.createCache(EhcacheManager.java:265)
  28. at org.ehcache.core.EhcacheManager.init(EhcacheManager.java:579)
  29. at org.ehcache.jsr107.EhcacheCachingProvider.createCacheManager(EhcacheCachingProvider.java:151)
  30. at org.ehcache.jsr107.EhcacheCachingProvider.getCacheManager(EhcacheCachingProvider.java:127)
  31. at org.ehcache.jsr107.EhcacheCachingProvider.getCacheManager(EhcacheCachingProvider.java:78)
  32. at org.springframework.cache.jcache.JCacheManagerFactoryBean.afterPropertiesSet(JCacheManagerFactoryBean.java:77)
  33. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1692)
  34. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1630)
  35. ... 75 more

更新:
我把ehcache的版本改成了3.0.0

  1. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myCacheService' defined in file [C:\Foo\target\foo-web-service\WEB-INF\classes\com\me\MyCacheService.class]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cache.interceptor.CacheInterceptor#0': Cannot resolve reference to bean 'ehCacheManager' while setting bean property 'cacheManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ehCacheManager': Failed to introspect bean class [org.springframework.cache.jcache.JCacheCacheManager] for lookup method metadata: could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: javax/cache/CacheManager
mkshixfv

mkshixfv1#

错误是由于xmlns定义不正确造成的。当我把它改成这个的时候,一切都很好。

  1. xmlns:p="http://www.springframework.org/schema/p"

并称之为 p: ```
<cache:annotation-driven cache-manager="ehCacheManager"/>




相关问题