8

名前で特定のEhCacheインスタンスを取得する必要があり、可能であれば自動配線したいと思います。次の自動的に構成されたコントローラーがある場合、探しているキャッシュインスタンスを自動配線するにはどうすればよいですか?

@Controller 
public class MyUniqueService {
    ...
}

<beans ...>
    <ctx:component-scan base-package="my.controllers"/>
    <mvc:annotation-driven />
</beans>

アプリケーションコンテキストでEhCacheを構成するにはどうすればよいですか?ディレクトリにehcache.xmlファイルをロードすることに関するEhCacheからのログメッセージが表示されません/WEB-INF/。どうすればロードできますか?

EhCacheをSpringアプリケーションと統合してehcache.xml、ディレクトリからファイルをロード/WEB-INF/し、指定された名前でキャッシュをコントローラーに自動配線するにはどうすればよいMyUniqueServiceですか?

4

4 に答える 4

17

まず、次のようなアプリコンテキストでEhcacheCacheManagerシングルトンを作成する必要があります。

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

ここでconfigLocationは、クラスパスからロードするか、を使用するように設定されていますvalue="/WEB-INF/my-ehcache.xml"

CacheManagerコントローラにインスタンスを挿入するだけです。

@Controller 
public class MyUniqueService {

    @Resource(name="myEhCacheManager")
    private CacheManager cacheManager;

    ...
}

または、「完全に自動配線された」ルートを使用する場合は、次のようにします。

<bean class="org.springframework.cache.ehcache.EhCacheCacheManager">
    <property name="cacheManager">
        <bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
            <property name="configLocation" value="/WEB-INF/ehcache.xml"/>
        </bean>
    </property>
</bean>

次のようにクラスを設定します。

@Controller
public class MyUniqueService { 

    @Autowired
    private org.springframework.cache.CacheManager cacheManager;

    public org.springframework.cache.Cache getUniqueObjectCache() {
        return cacheManager.getCache("uniqueObjectCache");
    }
}

uniqueObjectCacheehcache.xmlキャッシュ定義のこのキャッシュインスタンスに対応します。

<cache name="uniqueObjectCache"
       maxElementsInMemory="10000"
       eternal="false"
       timeToIdleSeconds="300"
       timeToLiveSeconds="600"
       memoryStoreEvictionPolicy="LRU"
       transactionalMode="off"/>

実際のキャッシュインスタンスを挿入する方法はありませんが、上記のように、キャッシュマネージャーを挿入し、それを使用して目的のキャッシュを取得できます。

于 2012-07-13T11:36:57.097 に答える
17

cacheManagerが定義されていると仮定します。

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

次のように特定のキャッシュを取得/挿入できます。

@Value("#{cacheManager.getCache('myCacheName')}")
private Cache myCache;

興味がある場合は、 @Value() http: //www.mkyong.com/spring3/spring-el-method-invocation-example/内でSpringELを使用する方法の例も参照してください。

于 2014-02-05T11:18:11.203 に答える
11

コンテキストが正しいクラスのBeanを見つけることができる場合は、autowireを使用することもできます。これが私のxmlを設定した方法です

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    <property name="configLocation">
        <value>WEB-INF/ehcache.xml</value>
    </property>
</bean>

<bean id="cache" class="net.sf.ehcache.Cache" factory-bean="cacheManager" factory-method="getCache">
    <constructor-arg value="CacheNameHere" />          
</bean>

そして私のJavaクラス

@Autowired
private net.sf.ehcache.Cache cache;

この設定は私にとってはうまくいきます。

于 2012-12-17T21:16:27.327 に答える
8

それはそう!または、Java構成クラスを使用する場合:

        @Inject
        private ResourceLoader resourceLoader;

        @Bean
        public CacheManager cacheManager() {
            EhCacheCacheManager ehCacheCacheManager = new EhCacheCacheManager();
            try {
                ehCacheCacheManager.setCacheManager(ehcacheCacheManager().getObject());
            } catch (Exception e) {
                throw new IllegalStateException("Failed to create an EhCacheManagerFactoryBean", e);
            }
            return ehCacheCacheManager;
        }

        @Bean
        public FactoryBean<net.sf.ehcache.CacheManager> ehcacheCacheManager() {
            EhCacheManagerFactoryBean bean = new EhCacheManagerFactoryBean();
            bean.setConfigLocation(resourceLoader.getResource("classpath:ehcache.xml"));
            return bean;
        }
于 2012-07-13T13:00:47.433 に答える