JBoss EAP 7:增加 JPA 应用程序的二级高速缓存大小



给定 JBoss 7 和一个启用了持久性二级缓存的应用程序.xml:

<property name="hibernate.cache.use_second_level_cache" value="true" />
<property name="hibernate.cache.use_query_cache" value="true" />
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.infinispan.JndiInfinispanRegionFactory" />
<property name="hibernate.cache.infinispan.cachemanager" value="java:jboss/infinispan/container/hibernate" />
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" />
<property name="hibernate.cache.default_cache_concurrency_strategy" value="transactional" />

还@Cacheable某些实体和 @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL( 在某些关系上。

因为性能不好,我打开了

<property name="hibernate.generate_statistics" value="true" />

坚持不懈.xml。

在 JPA 统计信息中,我看到很多缓存未命中,即使对于我几秒钟前访问的实体也是如此。所以我假设缓存大小不够大。如何增加它?

我试过了

<property name="hibernate.cache.infinispan.entity.eviction.max_entries" value="200000"/>
<property name="hibernate.cache.infinispan.entity.expiration.lifespan" value="1800000"/>
<property name="hibernate.cache.infinispan.entity.expiration.max_idle" value= "1200000"/>

坚持不懈.xml但仍然与错过一样。

澄清:对不起,我的意思是 JBoss EAP 7(从 2016 年开始(,而不是 JBoss AS 7(从 2011 年开始(。

除非您使用自定义区域(通过 org.hibernate.annotations.Cache(,否则设置hibernate.cache.infinispan.entity.eviction.max_entries是正确的方法。您甚至可以通过将它设置为 -1 来完全禁用逐出。

修改实体后,可以看到缓存未命中;缓存在每次写入后失效,并期望在下次读取时重新填充。另一种选择是某些内容正在调用 evictEntityRegions 或最终调用 evictAll 或 removeAll 的另一个操作。如果是这种情况,您必须调试这些方法或安装 Byteman 规则以找出罪魁祸首。

最新更新