web-dev-qa-db-ja.com

Spring @Cacheableおよび@EnableCachingを使用できません

私は古いものを交換しようとしています:

@Component
public interface MyEntityRepository extends JpaRepository<MyEntity, Integer> {

    @QueryHints({@QueryHint(name = CACHEABLE, value = "true")})
    MyEntity findByName(String name);
}

これで:

@Component
public interface MyEntityRepository extends JpaRepository<MyEntity, Integer> {

    @Cacheable(value = "entities")
    MyEntity findByName(String name);
}

Null値をキャッシュしないなどの高度なキャッシュ機能を使用したいためです。

そのために、私は春のチュートリアル https://spring.io/guides/gs/caching/ に従いました

Application.Javaに注釈を付けないと、キャッシュは機能しません。

しかし、@EnableCachingとCacheManager Bean:

package my.application.config;

@EnableWebMvc
@ComponentScan(basePackages = {"my.application"})
@Configuration
@EnableCaching
public class Application extends WebMvcConfigurerAdapter {

    @Bean
    public CacheManager cacheManager() {
        return new ConcurrentMapCacheManager("entities");
    }

// ...
}

起動時に次のエラーが表示されます。

Java.lang.IllegalStateException:CacheResolverが指定されておらず、タイプCacheManagerのBeanが見つかりません。 CacheManager Beanを登録するか、@ EnableCachingアノテーションを構成から削除します

私のCacheManager Beanを次のようなCacheResolver Beanで置き換えると、同じエラーが発生します。

@Bean
public CacheResolver cacheResolver() {
    return new SimpleCacheResolver(new ConcurrentMapCacheManager("entities"));
}

私は何かが恋しいですか?

13
Pleymor

@herau正しかった、私は豆に名前を付けなければならなかった!問題は、別のBean "cacheManager"があったため、最後に、アプリケーションに注釈を付けず、次のような構成を作成しました。

@EnableCaching
@Configuration
public class CacheConf{
    @Bean(name = "springCM")
    public CacheManager cacheManager() {
        return new ConcurrentMapCacheManager("entities");
    }
}

MyEntityRepository

    @Cacheable(value = "entities", cacheManager = "springCM")
    MyEntity findByName(String name);
17
Pleymor

私の場合、Spring Bootライブラリは古く、簡単にアップグレードする方法はありませんでした。したがって、私はEHCache 2バージョンを使用し、それは私のアプリケーションで機能しました。これは私が参照するのに便利だとわかったプロジェクトです: https://github.com/TechPrimers/spring-ehcache-example/blob/master/src/main/resources/ehcache.xml

0
Aliya