@Cacheable 用于默认 spring 数据 jpa 方法而不覆盖它们
@Cacheable for default spring data jpa methods without overriding them
对不起,如果我的问题不是新问题但我找不到 answer.I 使用 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 方法而不覆盖它们或没有这种方法?
是的,我们可以做到。基本上,Spring 使用 Hibernate ORM 作为 JPA 的实现。 Hibernate 本身支持缓存功能,并且会比 Spring Cache.
更好地集成
要启用 L2 缓存,请将这些属性添加到您的项目中添加以下属性。
spring.jpa.properties.hibernate.cache.use_second_level_cache=真
spring.jpa.properties.hibernate.cache.use_query_cache=真
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
和依赖hibernate-ehcache
完成此操作后,将缓存所有 JPA 的默认方法,如 findOne()
、findAll()
。
如果你添加任何自定义方法,你可以像下面这样添加:
@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value ="true") }) Category findByCategory(String Category);
要测试缓存默认方法的位置,您可以使用以下属性查看是否已执行 SQL。
spring.jpa.show-sql=真
spring.jpa.properties.hibernate.format_sql=真
对不起,如果我的问题不是新问题但我找不到 answer.I 使用 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 方法而不覆盖它们或没有这种方法?
是的,我们可以做到。基本上,Spring 使用 Hibernate ORM 作为 JPA 的实现。 Hibernate 本身支持缓存功能,并且会比 Spring Cache.
更好地集成要启用 L2 缓存,请将这些属性添加到您的项目中添加以下属性。
spring.jpa.properties.hibernate.cache.use_second_level_cache=真 spring.jpa.properties.hibernate.cache.use_query_cache=真 spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
和依赖hibernate-ehcache
完成此操作后,将缓存所有 JPA 的默认方法,如 findOne()
、findAll()
。
如果你添加任何自定义方法,你可以像下面这样添加:
@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value ="true") }) Category findByCategory(String Category);
要测试缓存默认方法的位置,您可以使用以下属性查看是否已执行 SQL。
spring.jpa.show-sql=真 spring.jpa.properties.hibernate.format_sql=真