我正在尝试设置一个bootstrapcacheloader,它将查询数据库并填充缓存。这里我使用的是集成了spring的ehcache。但问题是我无法将依赖关系连接到我的缓存加载器实现中。 @ Autowired,@ Resource,@ Configurable它们似乎都不起作用。很明显,缓存载体实例化不是由Spring容器完成的,但有没有办法可以将一个spring创建的缓存加载器实例注入缓存管理器并引导它? 我的实施细节如下。 的 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
public class ClaimsCacheLoaderFactory extends 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实例指定为Autowired属性,它也始终为null。 即使在缓存事件侦听器中也存在该问题。 有人请帮帮我。
答案 0 :(得分:0)
如果 cacheManager 为空,则意味着您尚未将 bean 提供给您的包。在定义 bean 的同一位置添加 @ComponentScan("yourpackage") 并在要使用缓存管理器的位置添加 @Component。 这是旧的,但我希望它可以帮助其他人。