带有休眠二级缓存的 Spring 引导



我试图使用二级缓存,所以我放了我的pom.xml

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>5.2.2.Final</version>
</dependency>

在我的应用程序中。

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

我把休眠生成统计数据

spring.jpa.properties.hibernate.generate_statistics=true
logging.level.org.hibernate.stat=DEBUG

在我的实体中,我把

@Entity(name = "natureza")
@Cacheable
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
public class Natureza extends AbstractEntity{
...
}

但是我怎么能看到我的缓存是否真的在工作。

我的休眠记录这个:

2018-04-05 12:56:44.954 DEBUG 33410 --- [nio-8080-exec-4] o.h.s.internal.ConcurrentStatisticsImpl  : HHH000117: HQL: SELECT * FROM natureza WHERE natureza_tipo_id = ?, time: 42ms, rows: 21 
2018-04-05 12:57:21.470 DEBUG 33410 --- [nio-8080-exec-7] o.h.s.internal.ConcurrentStatisticsImpl  : HHH000117: HQL: SELECT * FROM natureza WHERE natureza_tipo_id = ?, time: 21ms, rows: 21
2018-04-05 12:57:40.938 DEBUG 33410 --- [nio-8080-exec-9] o.h.s.internal.ConcurrentStatisticsImpl  : HHH000117: HQL: SELECT * FROM natureza WHERE natureza_tipo_id = ?, time: 27ms, rows: 21
2018-04-05 12:58:35.305 DEBUG 33410 --- [nio-8080-exec-2] o.h.s.internal.ConcurrentStatisticsImpl  : HHH000117: HQL: SELECT * FROM natureza WHERE natureza_tipo_id = ?, time: 18ms, rows: 21
2018-04-05 12:59:04.187 DEBUG 33410 --- [nio-8080-exec-9] o.h.s.internal.ConcurrentStatisticsImpl  : HHH000117: HQL: SELECT * FROM natureza WHERE natureza_tipo_id = ?, time: 14ms, rows: 21

然后我从我的应用程序中删除缓存,休眠记录以下内容:

2018-04-05 13:02:38.883 DEBUG 34669 --- [nio-8080-exec-3] o.h.s.internal.ConcurrentStatisticsImpl  : HHH000117: HQL: SELECT * FROM natureza WHERE natureza_tipo_id = ?, time: 50ms, rows: 21
2018-04-05 13:02:58.744 DEBUG 34669 --- [nio-8080-exec-6] o.h.s.internal.ConcurrentStatisticsImpl  : HHH000117: HQL: SELECT * FROM natureza WHERE natureza_tipo_id = ?, time: 23ms, rows: 21
2018-04-05 13:03:13.570 DEBUG 34669 --- [nio-8080-exec-4] o.h.s.internal.ConcurrentStatisticsImpl  : HHH000117: HQL: SELECT * FROM natureza WHERE natureza_tipo_id = ?, time: 12ms, rows: 21
2018-04-05 13:03:32.779 DEBUG 34669 --- [nio-8080-exec-4] o.h.s.internal.ConcurrentStatisticsImpl  : HHH000117: HQL: SELECT * FROM natureza WHERE natureza_tipo_id = ?, time: 11ms, rows: 21
2018-04-05 13:03:59.771 DEBUG 34669 --- [nio-8080-exec-4] o.h.s.internal.ConcurrentStatisticsImpl  : HHH000117: HQL: SELECT * FROM natureza WHERE natureza_tipo_id = ?, time: 7ms, rows: 21

因此,启用缓存后,休眠速度会更慢:D

可以验证休眠是否正确创建缓存? 如何?

您必须在"ehcache.xml"文件(资源文件夹)中映射 ehcache

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<cache
name="path.ENTITY"
maxEntriesLocalHeap="10000"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
<persistence strategy="localTempSwap"/>
/>
</ehcache>

信息: http://www.ehcache.org/documentation/2.7/integrations/hibernate.html

如果您没有映射 ehcache 中的实体,那么您就没有使用它,这就是您在日志中看到该时间的原因。

通过在记录器中记录"org.hibernate.cache"类别。

最新更新