spring-data-jpa是否有L2缓存实现?

时间:2018-04-10 10:59:38

标签: java caching spring-data-jpa

我正在尝试使用L2缓存创建具有最小设置的存储库。我的数据库是postgresql。

我从使用maven的spring-boot-sample-data-jpa-archetype项目开始。 我删除了HSQL并创建了一个DataSource bean来连接到postgresql。 还可以使用ddl创建模式并导入初始脚本数据。

我还将@Cacheable添加到我的实体中。 然后我使用单元测试使用存储库查询实体10次。花了1~49ms。所以这给我留下两个问题。

  1. 存储库是否受益于L1缓存?我如何知道我是否正在访问缓存或数据源?
  2. 如何启用L2缓存? Spring数据有自己的实现吗?

1 个答案:

答案 0 :(得分:4)

经过一些测试和@dunni的帮助。我会回答我自己的问题。 Spring使用Hibernate作为JPA的实现。 Spring数据提供了一些关于hibernate的包装器。还需要选择和实现缓存。

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

  1. spring.jpa.properties.hibernate.cache.use_second_level_cache =真
  2. spring.jpa.properties.hibernate.cache.use_query_cache =真
  3. spring.jpa.properties.hibernate.cache.region.factory_class = org.hibernate.cache.ehcacne.EhCacheRegionFactory
  4. 和依赖项 冬眠-ehcache的

    然后,将@Cacheable(true)添加到实体模型类。 扩展存储库接口,spring将使用命名约定生成实现。例如

    @QueryHints({@QueryHint(name="org.hibernate.cacheable", value="true")})
    Entity findByName(String name)
    

    您也可以实现该界面。但这需要在查询对象中添加提示以激活L2缓存。

    query.setHint("org.hibernate.cacheable", true);
    

    要验证缓存是否正常工作,可以使用以下属性查看SQL是否已执行。

    1. spring.jpa.show-SQL =真
    2. spring.jpa.properties.hibernate.format_sql =真