当前位置: 首页 > 知识库问答 >
问题:

Ehcache 和 spring bootstrapcacheloader 不工作

强承望
2023-03-14

我正在尝试设置一个bootstrapcacheloader,它将查询数据库并填充缓存。在这里,我使用与Spring集成的ehcache。但问题是我无法将依赖项连接到我的cacheloader实现中。@Autowed、@Resources、@Configurable似乎都不起作用。很明显,cacheloader实例化不是由Spring容器完成的,但有没有一种方法可以将Spring创建的cacheloader实例注入cachemanager并引导它?下面是我的实现细节。ehcache.xml

<cache name="MyCache"
       maxElementsInMemory="100000"
       eternal="false" 
       overflowToDisk="false"
       timeToLiveSeconds="500">
      <!--  <pinning store="localMemory"/> -->
      <bootstrapCacheLoaderFactory class="net.tristargroup.claims.helper.ClaimsCacheLoaderFactory" properties="bootstrapAsynchronously=true"/>
       <cacheEventListenerFactory class="net.tristargroup.claims.helper.TristarCacheEventListenerFactory" listenFor="all"/>

</cache>

Spring Context xml

<cache:annotation-driven/>

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
    <property name="cacheManager"><ref local="ehcache"/></property>
</bean>

<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" depends-on="cacheLoader">
    <property name="configLocation" value="classpath:ehcache.xml"/>
</bean>

缓存加载器类

 @Configurable

公共类ClaimsCacheLoaderFactory扩展BootstrapCacheLoaderFactory{

@Resource
CacheManager cacheManager;
    .
    .
    .
    @Override
public BootstrapCacheLoader createBootstrapCacheLoader(Properties arg0) {
    System.out.println("Create cache loader method . Cache manager is ->"+cacheManager);
    BootstrapCacheLoader cacheLoader = new ClaimsCacheLoader();
    return cacheLoader;
}

cacheManager实例在这里始终为空,即使我将其指定为自动连接属性。即使在缓存事件侦听器中也存在此问题。有人能帮我吗。

共有1个答案

丘普松
2023-03-14

如果cacheManager为null,这意味着您还没有使bean对您的包可用。在定义bean的位置添加一个@ComponentScan("yourpackage "),并在希望使用cacheManager的位置添加@Component。这是旧的,但我希望它能帮助其他人。

 类似资料:
  • 我正在使用Spring Data JPA和Hibernate开发一个应用程序,并尝试使用EHCache启用二级缓存。我将我的应用程序分成两个项目: CoreDataFacade:在这里,我使用QueryDSL、Spring data JPA和Hibernate以及Ehcache定义了数据访问操作。 QueryComponent:是使用CoreDataFacade项目访问数据的spring启动项目。

  • 让我澄清一下我对二级缓存的理解。在我的web应用程序的基类中有一个查询。几乎每一个操作都会调用此查询(我使用的是Struts,这就是应用程序的设计方式,因此不会真正弄乱它),例如,加载我的主页会调用三个单独的Struts操作,并为每个操作执行此查询。QueryDsl形式的查询看起来像

  • 下面是我的ehcache配置文件 所有Spring注释和配置都正常工作 但是缓存在timetoliveseconds之后无法清除。 谁能帮我一下我的配置有什么问题吗。 下面的页面说它是错误,但不知道如何解决这个问题? 我正在使用sping-boot-starter-cache-2.0.3版本 https://github.com/ehcache/ehcache-jcache/issues/26 有

  • 我无法让我的ehCache与磁盘存储一起工作。我想要一个持久缓存存在后,我重新启动我的应用程序。所以我尝试了ehCache,这是我的ehCache配置文件: 只要我不重新启动应用程序,缓存就会工作。在我重新启动应用程序并且ehCache试图从缓存文件加载数据之后,我得到了这个错误: 我还有一个ShutdownListener来关闭CacheManager 这是我的服务方式

  • roo-1.3.1.RC1. 我创建了具有适当 PK 和 FK 关系的简单 3-4 个表。我加载了数据。我使用spring-roo - reverse engg技术来生成基于JSF的UI。我有一个员工列表,它显示在默认的JSF生成的页面中,具有正确的分页。 如果员工数量在数据库中非常高,并且如果我想在应用程序启动期间加载到ehCache/hibernate二级缓存,那么我如何才能做到这一点? eh