名前で特定のEhCacheインスタンスを取得する必要があり、可能であれば自動配線したいと思います。次の自動的に構成されたコントローラーがある場合、探しているキャッシュインスタンスに自動配線するにはどうすればよいですか?
@Controller
public class MyUniqueService {
...
}
<beans ...>
<ctx:component-scan base-package="my.controllers"/>
<mvc:annotation-driven />
</beans>
アプリケーションコンテキストでEhCacheを構成するにはどうすればよいですか? /WEB-INF/
ディレクトリにehcache.xmlファイルをロードすることに関するEhCacheからのログメッセージが表示されません。どうすればロードできますか?
EhCacheをSpringアプリケーションと統合して、ehcache.xml
ディレクトリから/WEB-INF/
ファイルをロードし、指定された名前でキャッシュをMyUniqueService
コントローラーに自動配線するにはどうすればよいですか?
まず、次のようなアプリコンテキストで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");
}
}
uniqueObjectCache
は、ehcache.xml
キャッシュ定義のこのキャッシュインスタンスに対応します。
<cache name="uniqueObjectCache"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LRU"
transactionalMode="off"/>
実際のキャッシュインスタンスを挿入する方法はありませんが、上記のように、キャッシュマネージャーを挿入し、それを使用して目的のキャッシュを取得できます。
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を使用する方法の例も参照してください。 。
コンテキストが正しいクラスの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;
この設定は私のために働きます。
確かに!または、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;
}