【问题标题】:How to remove the Ehcache WARN messages when using Hibernate使用 Hibernate 时如何删除 Ehcache WARN 消息
【发布时间】:2015-07-08 23:18:50
【问题描述】:

我有这个 Ehcache XML 配置:

<ehcache>
    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="false"
            diskSpoolBufferSizeMB="30"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
            />
</ehcache>

另外,我有一些包含实体的包(大约 150 个)。如果我在 tomcat 服务器上部署我的应用程序,日志中有很多 WARN 消息:

2015-04-29 11:59:02,712 [RMI TCP 连接 (3)-127.0.0.1] 警告 org.hibernate.cache.ehcache.AbstractEhcacheRegionFactory - HHH020003: 找不到名为的缓存的特定 ehcache 配置 [com.company.project.entity.package.MyEntity];使用默认值。

我可以为每个实体编写配置 -

<cache name="com.company.project.entity.package.MyEntity"
                      maxEntriesLocalHeap="50"
                      eternal="false"
                      overflowToDisk="false"
                    timeToLiveSeconds="120">
                <persistence strategy="localTempSwap"/>
        </cache>

但是这样一来,我的配置文件就变得太大了(1600 行)。我认为还有另一种方法可以为每个实体设置默认配置并终止警告消息,但我不知道该怎么做。如果有人知道,请帮忙。非常感谢。

【问题讨论】:

  • 您是否见过这个问题,它似乎描述了与您看到的相同的警告? stackoverflow.com/questions/19280073/…
  • 两种解决方案,1/ 杀死日志(使用日志配置)或 2/ 为每个实体定义一个 ehcache 配置
  • 警告HHH020003被提及here,您可以尝试提到的解决方案(在persistence.xml中设置&lt;property name="hibernate.cache.region_prefix" value=""/&gt;)。
  • 这个星期一我会努力去做的。
  • @Bobulous,我添加了 UpdateTimestampsCache(用于休眠 4.3.8 的 org.hibernate.cache.spi.UpdateTimestampsCache),但它什么也没做(我不明白,ehcache.org/generated/2.9.0/html/ehc-all/index.html#page/… 怎么能做某事我的问题)。

标签: java hibernate logging configuration ehcache


【解决方案1】:

这是记录警告消息的 Hibernate EHCache 缓存区域代码:

private Ehcache getCache(String name) throws CacheException {
    try {
        Ehcache cache = manager.getEhcache( name );
        if ( cache == null ) {
            LOG.unableToFindEhCacheConfiguration( name );
            manager.addCache( name );
            cache = manager.getEhcache( name );
            LOG.debug( "started EHCache region: " + name );
        }
        HibernateEhcacheUtils.validateEhcache( cache );
        return cache;
    }
    catch (net.sf.ehcache.CacheException e) {
        throw new CacheException( e );
    }

}

如您所见,您有两种选择:

  1. 您可以在ehcache.xml 文件中声明缓存区域。
  2. 您将 'org.hibernate.cache.ehcache.AbstractEhcacheRegionFactory' 日志级别设置为 ERROR:

    对于 Log4j2:

    <Logger name="org.hibernate.cache.ehcache.AbstractEhcacheRegionFactory" level="error">
        <AppenderRef ref="File"/>
    </Logger>
    

【讨论】:

    【解决方案2】:

    一种选择是创建一个 CacheObject 基础实体并将其配置为您的缓存对象。

    不是最干净的解决方案,但会在不添加大量配置的情况下删除警告。

    由于警告就是这样,我个人只会将其配置为不显示。

    【讨论】:

    • 好主意,但不幸的是我现在在家。今天我会测试它,希望它会起作用。
    猜你喜欢
    • 2022-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2022-06-11
    • 2016-09-21
    • 1970-01-01
    相关资源
    最近更新 更多