복붙노트

[SPRING] 스프링 캐시를위한 커스텀 KeyGenerator를 어떻게 설정합니까?

SPRING

스프링 캐시를위한 커스텀 KeyGenerator를 어떻게 설정합니까?

스프링 3.1을 사용하고 있으며 새로운 캐시 기능을 사용하려고합니다. 다음, 나는 시도했다 :

<cache:annotation-driven />

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
    p:cache-manager-ref="ehcache" />

<!-- Ehcache library setup -->
<bean id="ehcache"
    class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
    p:config-location="classpath:ehcache.xml" />

하지만 내 사용자 정의 KeyGenerator를 구성하는 방법을 찾지 못했습니다. 어떤 생각?

해결법

  1. ==============================

    1.Spring 3.1 RC1에는 더 좋은 방법이있다.

    Spring 3.1 RC1에는 더 좋은 방법이있다.

    <cache:annotation-driven key-generator="myKeyGenerator"/>
    <bean id="myKeyGenerator" class="com.abc.MyKeyGenerator" />
    
    import org.springframework.cache.interceptor.KeyGenerator;
    public class MyKeyGenerator implements KeyGenerator {
    
        public Object generate(Object target, Method method, Object... params) {
    }}
    

    오늘 봄부터 스프링을 다운로드하면 작동하는 jar 파일에서 org.springframework.context.support-3.1.0.RC1.jar \ org \ springframework \ cache \ config \ spring-cache-3.1.xsd를 삭제하십시오. 벌금.

  2. ==============================

    2.좋아, 이걸 할 방법을 찾았 어.

    좋아, 이걸 할 방법을 찾았 어.

    <!-- <cache:annotation-driven /> -->
    
    <bean id="annotationCacheOperationSource"
        class="org.springframework.cache.annotation.AnnotationCacheOperationSource" />
    
    <bean id="cacheInterceptor" class="org.springframework.cache.interceptor.CacheInterceptor"
        p:cacheDefinitionSources-ref="annotationCacheOperationSource"
        p:cacheManager-ref="cacheManager" p:keyGenerator-ref="keyGenerator" />
    
    <bean id="beanFactoryCacheOperationSourceAdvisor"
        class="org.springframework.cache.interceptor.BeanFactoryCacheOperationSourceAdvisor"
        p:adviceBeanName="cacheInterceptor" p:cacheDefinitionSource-ref="annotationCacheOperationSource" />
    
    <bean id="keyGenerator"
        class="my.company.cache.ReflectionBasedKeyGenerator" />
    

    보시다시피 AnnotationDrivenCacheBeanDefinitionParser를 사용하여 구성을 내 xml에 넣으면 작동합니다. 완료!

    편집하다:

    Spring> 3.2의 경우 CachingConfigurer를 구현하는 간단한 Java 클래스 구성을 사용할 수있다.

    @EnableCaching(mode = AdviceMode.ASPECTJ)
    public class CacheConfig implements CachingConfigurer {
    
        public KeyGenerator keyGenerator() {
            return new ReflectionBasedKeyGenerator();
        }
    
        public CacheManager cacheManager() {
            return new RedisCacheManager(redisCacheTemplate);
        }
    }
    
  3. ==============================

    3.스프링 프레임 워크의 기본 Cache KeyGenerator에 문제가 발생했습니다. 종종 충돌이 발생하는 것으로 보이며이 문제에 기록 된 것 같습니다.

    스프링 프레임 워크의 기본 Cache KeyGenerator에 문제가 발생했습니다. 종종 충돌이 발생하는 것으로 보이며이 문제에 기록 된 것 같습니다.

    나는이 질문이 이미 답변으로 표시되어 있음을 알고 있지만, 나는 이것을 어떻게 해결했는지를 나눌 것이라고 생각했다.

    <cache:annotation-driven cache-manager="cacheManager" key-generator="entityKeyGenerator" />
    
    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
        <property name="cacheManager" ref="ehcache" />
    </bean>
    
    <bean id="ehcache"
        class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
        p:configLocation="classpath:/ehcache-dciComponent.xml" p:shared="true" />
    

    기본적으로, 우리는 우리 자신의 Cache KeyGenerator를 만들고 사용했다.

  4. from https://stackoverflow.com/questions/6730641/how-can-i-set-a-custom-keygenerator-for-spring-cache by cc-by-sa and MIT license