@Cacheable для стандартных jpa-методов данных по умолчанию без их переопределения - PullRequest
0 голосов
/ 21 января 2020

Извините, если мой вопрос не новый, но я не смог найти ответ. Я использую Spring Data JPA и Spring Cache. У меня есть следующий репозиторий

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

    Category findByCategory(String Category);
}

И я хочу кэшировать стандартные методы CrudRepository, такие как findAll () и др. c. Это работа Если я переопределяю их вот так

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

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

    }

Но это не удобно переопределять их каждый раз для каждого репозитория.

Есть ли способ кэширования по умолчанию методов Spring jpa без их переопределения или нет?

1 Ответ

1 голос
/ 07 февраля 2020

Да, мы можем это сделать. В основном 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 = правда

...