@cacheable用于默认的Spring数据jpa方法,而不覆盖它们

好的,如果我的问题不是新问题,但我找不到答案,我使用Spring Data JPA和Spring Cache。 我有下面的仓库

@CacheConfig(cacheNames = "Category")
@Cacheable
@Repository
public interface Repository extends CrudRepository<Category,Long> {

    Category findByCategory(String Category);
}

我想缓存默认的CrudRepository方法,例如findAll()等。 如果我这样覆盖它们

    @CacheConfig(cacheNames = "Category")
    @Cacheable
    @Repository
    public interface Repository extends CrudRepository<Category,Long> {

        Category findByCategory(String Category);
        List<Category> findAll();

    }

但是每次为每个存储库覆盖它们都不方便。

有没有一种方法可以缓存默认的Spring jpa方法而不会覆盖它们呢?

laoshu8688 回答:@cacheable用于默认的Spring数据jpa方法,而不覆盖它们

是的,我们可以做到。基本上,Spring使用Hibernate ORM作为JPA的实现。 Hibernate本身支持缓存功能,并且将比Spring Cache更好地集成。

要启用L2缓存,请将这些属性添加到您的项目中,添加以下属性。

spring.jpa.properties.hibernate.cache.use_second_level_cache = true spring.jpa.properties.hibernate.cache.use_query_cache = true spring.jpa.properties.hibernate.cache.region.factory_class = org.hibernate.cache.ehcacne.EhCacheRegionFactory

和依赖项hibernate-ehcache

完成此操作后,所有JPA的默认方法(如findOne()findAll())都将被缓存。

如果添加任何自定义方法,则可以添加如下内容:

@QueryHints({ @QueryHint(name = "org.hibernate.cacheable",value ="true") }) Category findByCategory(String Category);

要测试默认方法的缓存位置,可以使用以下属性查看是否已执行SQL。

spring.jpa.show-sql = true spring.jpa.properties.hibernate.format_sql = true

本文链接:https://www.f2er.com/2738321.html

大家都在问