7

私の grails アプリで ehcache をパーソナライズするために、次の xml を config ディレクトリに追加しました。

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" >
<diskStore path="/path/to/store/data"/>
<cacheManagerEventListenerFactory class="" properties=""/>
<defaultCache
   maxEntriesLocalHeap="10000"
   eternal="false"
   timeToLiveSeconds="120">
   <persistence strategy="none"/>
</defaultCache>
<cache name="Book"
  maxEntriesLocalHeap="10000"
  timeToIdleSeconds="300"
   />
<cache name="org.hibernate.cache.UpdateTimestampsCache"
  maxEntriesLocalHeap="10000"
  timeToIdleSeconds="300"
   />
<cache name="org.hibernate.cache.StandardQueryCache"
  maxEntriesLocalHeap="10000"
  timeToIdleSeconds="300"
   />
</ehcache>

驚いたことに、起動すると、grails アプリは次の例外で停止します。

Caused by: net.sf.ehcache.CacheException: Error configuring from input stream. Initial  cause was null:9: Element <defaultCache> does not allow attribute "maxEntriesLocalHeap".
at    net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:152)
at net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(ConfigurationFactory.java:99)
... 30 more

ヒントはありますか?私はgrails 1.3.9を使用しています。ありがとう。

4

5 に答える 5

9

Springで同じ問題が発生しmaxEntriesLocalHeapmaxEntriesLocalDisk同じ例外がスローされました。私にとってはうまくいったように見えたのはmaxElementsInMemorymaxElementsOnDisk代わりにを使用することでした。javadocからそれらを見つけました。

現在、非推奨になっていることに基づいて、古いバージョンのEHCacheが私のconfとあなたのconfで実行されていたと思います。

この表に基づいて、maxEntriesLocalHeapはEHCache2.5で提供されました。それ以前はmaxElementsInMemoryでした。問題が発生したときは、ehcache-spring-annotationsを使用していました。この記事の執筆時点では、バージョン1.2.0であり、ehcache 2.4.5が付属しているため、これらのプロパティはサポートされていません。

純粋なSpring構成とEHCache2.5への明示的な依存関係を採用した後、問題は解消され、当初意図していたプロパティを使用できるようになりました。

于 2012-10-03T13:30:51.110 に答える
3

Ehcache の最新バージョン (2.6.x) では、「maxEntriesLocalHeapEhcache」などのタグや「persistence」などの内部要素が追加されました。

A) ('maxEntriesLocalHeap' の代わりに) 'maxElementsInMemory' を使用します。'overflowToDisk' および 'diskPersistent' 属性を ('persistence' 要素の代わりに) 使用します。B) プラグインの最新バージョンを取得するか、最新の jar をプロジェクトに手動で追加してみてください。

于 2012-10-16T10:41:47.500 に答える
1

休止状態を使用する場合

バージョン 4.3.5 または 4.3.7 には Ehcache 2.4.7 の依存関係があり、そのバージョンにはプロパティ maxEntriesLocalHeap および maxEntriesLocalDisk がありません。

Ehcache 2.4.x に関するドキュメント: http://ehcache.org/files/documentation/EhcacheUserGuide.pdf

hibernate 4.3.5 を使用した私の例:

<defaultCache maxElementsInMemory="10000"
              eternal="false"
              timeToIdleSeconds="300"
              timeToLiveSeconds="600"
              diskSpoolBufferSizeMB="30"
              maxElementsOnDisk="10000"
              diskExpiryThreadIntervalSeconds="120"
              memoryStoreEvictionPolicy="LRU" statistics="false">
</defaultCache>

<cache
        name="org.hibernate.cache.spi.UpdateTimestampsCache"
        maxElementsInMemory="10000"
        eternal="false">
</cache>

<cache
        name="org.hibernate.cache.internal.StandardQueryCache"
        maxElementsInMemory="10000"
        eternal="false"
        timeToLiveSeconds="300">
</cache>

<!--
If you are concerned about cpu utilisation and locking in the DiskStore, you can set the
diskExpiryThreadIntervalSeconds to a high number - say 1 day. Or you can effectively turn it off by
setting the diskExpiryThreadIntervalSeconds to a very large value
-->
<cache
        name="br.com.atlantico.toi.model.calc.Anomalia"
        maxElementsInMemory="10000"
        eternal="false"
        timeToIdleSeconds="300"
        timeToLiveSeconds="600"/>

于 2014-12-19T00:32:44.123 に答える
0

eis が言ったように、Hibernate-ehcache は内部的に ehcache 2.4.3 を使用しますが、そのバージョンでは属性がサポートされていません。ehcache の上位バージョンを使用する必要があります。

ここで、より詳細な構成を追加してみてください:

まず、hibernate-ehcache と ehcache-core の両方を maven pom に追加します。

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-ehcache</artifactId>
    <version>${hibernate.version}</version>
</dependency>
<dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache-core</artifactId>
    <version>2.6.5</version>
</dependency>

次に、Spring 構成でセッション ファクトリのプロパティを設定します。org.hibernate のクラスを使用します。、net.sf.ehcache からの代わりに。

<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory </prop>
于 2015-05-20T03:15:37.053 に答える