2012-07-13 12 views
8

特定のEhCacheインスタンスを名前で取得する必要があり、可能であれば自動配線することをお勧めします。次のように自動的に設定されたコントローラがある場合、私が探しているキャッシュのインスタンスでどのように自動配線できますか?私は自分のアプリケーションのコンテキスト内にehcacheを設定するにはどうすればよいSpringでEhCacheインスタンスを取得する...インテリジェントに

@Controller 
public class MyUniqueService { 
    ... 
} 

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

?自分の/WEB-INF/ディレクトリにehcache.xmlファイルをロードすることについて、EhCacheからのログメッセージは表示されません。どのようにロードするのですか?

は、どのように私はそれが私の/WEB-INF/ディレクトリからehcache.xmlファイルをロードして、私のMyUniqueServiceコントローラに与えられた名前でキャッシュをautowire持っている私のSpringアプリケーションでehcacheを統合することができますか?

答えて

16

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

<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; 

    ... 
} 

、あなたは "完全autowired" ルートを移動したい場合は、ん:

<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"); 
    } 
} 

uniqueObjectCacheあなたehcache.xmlキャッシュ定義でこのキャッシュ・インスタンスに対応:

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

は、実際のキャッシュ・インスタンスを注入する方法はありませんが、上記のように、あなたはキャッシュマネージャを注入して得るためにそれを使用することができますあなたが興味を持っているキャッシュ

7

本当に!または、Javaの設定クラスを使用する場合:

9

正しいクラスのBeanをコンテキストが見つけられる場合は、autowireを使用することもできます。ここで私はこのセットアップは私の作品

<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; 

を私のxmlの設定方法です。

<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/内部のスプリングELを使用する方法の例を参照してください、あなたがたCacheManagerが定義されていると仮定すると、

+0

これはもちろん、1つのキャッシュしか持たないと仮定しています –

+1

@ClintonBosch - 複数ある場合、 '@ Autowired'で' @Qualifier( 'cacheBeanId') 'を使用するだけです。 – moshen

関連する問題