Hibernate JBoss EAP 7:增加JPA应用程序的二级缓存大小
给定JBoss 7和一个在persistence.xml中启用了二级缓存的应用程序:Hibernate JBoss EAP 7:增加JPA应用程序的二级缓存大小,hibernate,jpa,jboss,jboss7.x,infinispan,Hibernate,Jpa,Jboss,Jboss7.x,Infinispan,给定JBoss 7和一个在persistence.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" v
<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(用法=cacheconcurrencysttrategy.TRANSACTIONAL)在某些关系上
因为性能不好,我打开了
<property name="hibernate.generate_statistics" value="true" />
在persistence.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"/>
在persistence.xml中,但未命中仍然相同
澄清:对不起,我指的是JBoss EAP 7(从2016年起),而不是JBoss AS 7(从2011年起) 除非您使用自定义区域(通过
org.hibernate.annotations.Cache
),否则设置hibernate.Cache.infinispan.entity.execision.max_entries
是正确的方法。您甚至可以通过将其设置为-1来完全禁用逐出
修改实体后,可以看到缓存未命中;缓存在每次写入后都会失效,并期望在下次读取时重新填充。另一个选项是某个正在调用或另一个操作最终调用或。如果出现这种情况,您必须调试这些方法或安装Byteman规则以找出罪魁祸首。除非您使用自定义区域(通过
org.hibernate.annotations.Cache
),否则设置hibernate.Cache.infinispan.entity.execution.max_entries
是正确的方法。您甚至可以通过将其设置为-1来完全禁用逐出
修改实体后,可以看到缓存未命中;缓存在每次写入后都会失效,并期望在下次读取时重新填充。另一个选项是某个正在调用或另一个操作最终调用或。如果是这种情况,你必须调试这些方法或安装Byteman规则来找出罪魁祸首。我觉得这一切都是正确的,尝试更改区域工厂例如:
你可以按实体尝试例如:
我觉得这一切都是正确的,尝试更改区域工厂例如:
你可以按实体尝试例如: