1

アプリで gemfire を使用してキャッシュを実行しようとしています。これが私のプロパティです:

<context:component-scan base-package="my-base-package"/>
<context:annotation-config/>

<!-- Gemfire transation manager -->
<gfe:transaction-manager id="transactionManager" cache-ref="propertyGemfireCache"/>

<!-- Gemfire properties -->
<util:properties id="gemfire-props"
                 location="classpath:conf/environments/gemfire.properties"/>

<!-- Gemfire Client cache -->
<gfe:client-cache id="propertyGemfireCache" properties-ref="gemfire-props"
                  pool-name="gemfire-pool" pdx-serializer-ref="pdxSerializer" pdx-persistent="true"/>

<!-- Gemfire PDX serializer -->
<bean id="pdxSerializer" class="com.gemstone.gemfire.pdx.ReflectionBasedAutoSerializer">
    <property name="serializableClasses">
        <list>
            <value>com\.acmecorp\.enterprise\.property\..*,java\.util\..*</value>
        </list>
    </property>
</bean>

<!-- Gemfire connection pool -->
<bean id="gemfire-pool" class="org.springframework.data.gemfire.client.PoolFactoryBean">
    <property name="subscriptionEnabled" value="true"/>
    <property name="freeConnectionTimeout" value="60000"/>
    <property name="prSingleHopEnabled" value="true"/>
    <property name="locators" ref="gemfireLocators"/>
</bean>

<bean id="gemfireCacheManager" class="org.springframework.data.gemfire.support.GemfireCacheManager"
      p:cache-ref="propertyGemfireCache"/>

<gfe:client-region id="myRegion" name="${cache.region.name}" statistics="true"
                   cache-ref="propertyGemfireCache" shortcut="LOCAL">
    <gfe:region-ttl timeout="86400"/>
</gfe:client-region>
<bean id="myTemplate" class="org.springframework.data.gemfire.GemfireTemplate">
  <property name="region" ref="myRegion"/>
</bean>
<cache:advice id="myAdvice" cache-manager="gemfireCacheManager">
    <cache:caching>
        <cache:cacheable cache="myRegion" method="getSomeData"
                         key="''+#data"/>
    </cache:caching>
</cache:advice>

<aop:config>
    <aop:advisor advice-ref="myAdvice"
                 pointcut="execution( * *..ServiceImpl.getData(..)) and within(another-my-package.service.impl..*)"/>
</aop:config>

プロパティcache.region.nameは に等しいcorrect_region_nameです。アプリを実行すると、次のようなエラーが表示されます。

CacheableOperation[] caches=[myRegion] の「myRegion」という名前のキャッシュが見つかりません

しかし、「myRegion」を正しいリージョンに置き換えると、correct_region_name. したがって、次のようになります。

<cache:cacheable cache="correct_region_name" method="getSomeData"
                         key="''+#data"/>

すべてが完璧に機能しますが、それは必要ありません。ヘルプはありますか?

4

2 に答える 2

1

Spring (Data GemFire)は、 Spring の Cache Abstraction内の「名前」をリージョンの名前で検索します (別名; これは、 BeanNameAwareを実装しているため、ここで設定されている Bean IDである必要はありません)。CacheCacheRegionLookupFactoryBean

あなたは試すかもしれません...

<cache:cacheable cache="${gemfire.region.name}" method="getSomeData" key="''+#data"/>
于 2015-11-13T19:23:12.917 に答える
0

client-cache 構成でプロパティ プレース ホルダー ${cache.region.name} を使用することと、Spring がこれらを解決する順序に問題がある可能性があると思います。そこに地域名をハードコーディングしても機能しますか?

于 2015-11-13T11:50:49.407 に答える