2017-05-08 7 views
0

Spring/Tomcatアプリケーションがあり、ehcacheをHibernateの第2レベルのエンティティキャッシュとして動作させようとしています。有効で有効です。デバッグログの出力には、キャッシュされるエンティティの数がわかります。問題は、数秒ごとにキャッシュが空になることです。私もキャッシュを固定(つまり、動作を変更するかどうちょうど参照)と、今私はこの参照してください。hibernate第2レベルのキャッシュ自体が空になる

05-08-2017 16:05:21.550 [taskExecutor-12] {env=''} WARN n.s.e.Cache: Data availability impacted: 
**************************************************************************************** 
************************** removeAll called on a pinned cache ************************** 

05-08-2017 16:05:21.550 [taskExecutor-12] {env=''} WARN n.s.e.Cache: Data availability impacted: 
**************************************************************************************** 
************************** removeAll called on a pinned cache ************************** 

をだから私は、これが問題だと思います。 removeAllが暗黙のうちに何度も何度も呼び出される原因は何ですか?

ehcache.xml

 <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" /> 
      <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" /> 
      <property name="hibernate.show_sql" value="false" /> 
      <property name="hibernate.hbm2ddl.auto" value="update" /> 
      <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy" /> 
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider" /> 
      <property name="hibernate.cache.use_second_level_cache" value="true" /> 
      <property name="hibernate.cache.use_query_cache" value="false" /> 
      <property name="hibernate.generate_statistics" value="true" /> 
      <property name="hibernate.cache.use_structured_entries" value="true" /> 
      <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory" /> 
     </properties> 

そして、これらのアノテーションは、エンティティモデルクラスにある

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="ehcache.xsd" 
    updateCheck="true" 
    monitoring="autodetect" 
    maxBytesLocalHeap="24G" 
    dynamicConfig="true"> 

    <defaultCache eternal="true" maxBytesLocalHeap="1" /> <!-- not used, but required per ehcache configuration rules --> 

    <!-- cache for foo --> 
    <cache name="foo" 
      maxBytesLocalHeap="8G" 
      eternal="false" 
      memoryStoreEvictionPolicy="LRU" 
      timeToLiveSeconds="12000" 
      transactionalMode="off"> 
     <pinning store="inCache" /> 
     <persistence strategy="none" /> 
    </cache> 
</ehcache> 

のpersistence.xml:

@Cacheable 
@Cache(region = "foo", usage = CacheConcurrencyStrategy.READ_WRITE) 

答えて

1

私はそれを把握します。ネイティブSQLのDELETEクエリにより、hibernateは頻繁にキャッシュ全体をダンプしていました(上記のremoveAll呼び出し)。私は以下のように提案し、すべてが今働いています。

2nd level cache invalidation with native queries

関連する問題