Java 使用ehcache编写自定义RefreshAheadCacheFactory

Java 使用ehcache编写自定义RefreshAheadCacheFactory,java,spring,caching,ehcache,terracotta,Java,Spring,Caching,Ehcache,Terracotta,在尝试使用内联刷新实现我自己的缓存加载器并读取以下位置的文档时: & 但我不确定如何实现我自己的缓存。如何在此类中实现方法createCacheLoader: public class MyCacheLoaderFactory extends net.sf.ehcache.loader.CacheLoaderFactory{ @Override public CacheLoader createCacheLoader(Ehcache cache, Properties pr

在尝试使用内联刷新实现我自己的缓存加载器并读取以下位置的文档时:

&

但我不确定如何实现我自己的缓存。如何在此类中实现方法createCacheLoader:

public class MyCacheLoaderFactory extends net.sf.ehcache.loader.CacheLoaderFactory{

    @Override
    public CacheLoader createCacheLoader(Ehcache cache, Properties properties) {
        // TODO Auto-generated method stub

        return null;
    }

}
如何创建缓存加载器如何配置参数缓存和属性

我已使用以下代码在junit中连接缓存:

import java.util.Properties;

import net.sf.ehcache.Ehcache;
import net.sf.ehcache.loader.CacheLoader;


public class MyCacheLoaderFactory extends net.sf.ehcache.loader.CacheLoaderFactory{

    @Override
    public CacheLoader createCacheLoader(Ehcache cache, Properties properties) {
        // TODO Auto-generated method stub

        return null;
    }

}


<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
    <defaultCache eternal="true" maxElementsInMemory="100"
        overflowToDisk="false" />
    <cache name="myCache" maxElementsInMemory="10000" eternal="true"
        overflowToDisk="false">

  <cacheLoaderFactory class="MyCacheLoaderFactory" 
    />

        <cacheDecoratorFactory 
            class="net.sf.ehcache.constructs.refreshahead.RefreshAheadCacheFactory"
            properties="name=myCacheRefresher,
      timeToRefreshSeconds=20,
      batchSize=10,
      numberOfThreads=4,
      maximumBacklogItems=100,
      evictOnLoadMiss=true" />

    </cache>
</ehcache>

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
    xmlns:cache="http://www.springframework.org/schema/cache"
     xmlns:p="http://www.springframework.org/schema/p"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
    <cache:annotation-driven />
    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
        p:cache-manager-ref="ehcache" />
    <bean id="ehcache"
        class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
        p:config-location="my-ehcache.xml" />

    <bean id="myCache" class="ehcache.MyCache"></bean>
</beans>
运行testCache时,我收到异常:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cacheManager' defined in class path resource [spring-ehcache.xml]: Cannot resolve reference to bean 'ehcache' while setting bean property 'cacheManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ehcache' defined in class path resource [spring-ehcache.xml]: Invocation of init method failed; nested exception is net.sf.ehcache.CacheException: java.lang.NullPointerException
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
我认为这是因为我的createCacheLoader实现只返回null,但是返回的对象CacheLoader应该如何构造呢

这可能与此无关,但下面是我的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>ehcache-test</groupId>
    <artifactId>ehcache-test</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>net.sf.ehcache.internal</groupId>
            <artifactId>ehcache-core</artifactId>
            <version>2.9.0</version>
        </dependency>

        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>3.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>3.1.0.RELEASE</version>
        </dependency>
    </dependencies>
</project>

4.0.0
ehcache测试
ehcache测试
0.0.1-快照
net.sf.ehcache.internal
ehcache内核
2.9.0
cglib
cglib
2.2
org.springframework
spring上下文
3.1.0.1发布
朱尼特
朱尼特
4.10
org.springframework
弹簧试验
3.1.0.1发布

您可以从类中的方法
MyCacheLoaderFactory
返回a的实现

第一个参数是要为其返回加载程序的缓存——正如Javadoc中记录的,因为它尚未初始化,因此不应使用,但是可以查询它的配置。 当您使用单个工厂向不同的缓存提供
CacheLoader
s时,此参数非常有用

第二个参数是在XML配置中定义的属性,与使用
cachedecorfactory
时相同

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>ehcache-test</groupId>
    <artifactId>ehcache-test</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>net.sf.ehcache.internal</groupId>
            <artifactId>ehcache-core</artifactId>
            <version>2.9.0</version>
        </dependency>

        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>3.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>3.1.0.RELEASE</version>
        </dependency>
    </dependencies>
</project>