gpt4 book ai didi

java - 使用 Hibernate、EhCache 和 Wildlfy 设置二级缓存参数

转载 作者:太空宇宙 更新时间:2023-11-04 12:55:09 25 4
gpt4 key购买 nike

我有使用 Hibernate 和 EhCache 作为二级缓存提供程序的应用程序。该应用程序部署在 Wildfly 8.2 上。二级缓存已配置并按预期工作,但我无法弄清楚如何以通用方式在 echache.xml 配置中为二级缓存提供单独的配置。目前我的设置如下:

实体:

     /**
* The Country class
*/
@Entity
@Table(name = "country")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "ENTITY_L2_CACHE")
public class Country extends AbstractPersistentEntity {}

pesistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="app_PU" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>jdbc/app</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.enable_lazy_load_no_trans" value="true"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect"/>
<property name="hibernate.transaction.jta.platform" value="com.torqueits.pos.jpa.ProxyJtaPlatform"/>
<!-- enabling L2 cache -->
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/>
<property name="hibernate.generate_statistics" value ="false" />
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="false"/>
<property name="hibernate.cache.ehcache.statistics" value="false"/>
<property name="hibernate.generate_statistics" value="false"/>
</properties>
</persistence-unit>
</persistence>

还有 ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" name="torqueCacheManager">
<diskStore path="java.io.tmpdir"/>
<!-- Fail safe default cache-->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
...
memoryStoreEvictionPolicy="LRU">
</defaultCache>
<cache name="ENTITY_L2_CACHE"
maxElementsInMemory="10000"
...
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"/>
</ehcache>

当我将实体配置为使用 ENTITY_L2_CACHCE 作为二级缓存的区域时,hibernate 使用的实际名称是

application.war#app_PU.ENTITY_L2_CACHE

它使用部署名称加上持久性单元名称作为区域的前缀。我无法控制部署名称,因此无法将“application.war#app_PU.ENTITY_L2_CACHE”放入 ehcache.xml 中。我不确定这是否与 hibernate 或野蝇服务器有关。

是否有办法配置不绑定(bind)特定部署名称的二级缓存参数?

最佳答案

看着

org.hibernate.cfg.AvailableSettings

类(class),我发现了

'hibernate.cache.region_prefix'

控制缓存区域前缀的参数。因此,为了解决这个问题,我需要配置一些前缀,然后在 ehCache.xml 配置文件中使用这个前缀来进行二级缓存。

参数应在 persistence.xml 文件中设置:

<property name="hibernate.cache.region_prefix" value="com.example.app"/>

关于java - 使用 Hibernate、EhCache 和 Wildlfy 设置二级缓存参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35470044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com