我正在将缓存集成到我的Web应用程序中,但由于某些原因,在添加@Cacheable注释时无法加载应用程序上下文。
我一直试图解决这个问题两天了,非常感谢你的帮助!
app.context.xml
const template = ({title, lead, description}) => `<div class="classes" data-class="XII">
<button onclick="tog('XII')" class="btn btn-block text-mono btn-outline-secondary">XII</button>
<div id="XII" style="display: none;">
<div class="card mb-3 text-center bg-secondary text-light border-0">
<div class="card-body">
<blockquote class="card-blockquote">
<h2 class="display-4">${title}</h2>
<hr class="my-4">
<p class="lead">${lead}</p>
<p>${description}</p>
<button class="btn btn-shadow text-mono btn-danger">Delete</button>
</blockquote>
</div>
</div>
</div>
</div>`;
const $html = $(template({
title: 'my title',
lead: 'my lead',
description: 'my description'
});
ehcache.xml中
<cache:annotation-driven cache-manager="EhCacheManagerBean" key-generator="customKeyGenerator" />
<bean id="EhCacheManagerBean" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cache-manager-ref="ehcacheBean" />
<bean id="ehcacheBean" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="classpath:EhCache.xml" p:shared="true" />
<bean id ="customKeyGenerator" class="com.app.site.v2.cache.customKeyGenerator"/>
<bean id="siteService" class="com.app.site.v2.SiteService" primary="true"/>
正在缓存的方法
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
updateCheck="true"
monitoring="autodetect"
dynamicConfig="true">
<diskStore path="java.io.tmpdir" />
<cache name="cacheSite"
maxEntriesLocalHeap="100"
maxEntriesLocalDisk="1000"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LFU"
transactionalMode="off">
<persistence strategy="localTempSwap" />
</cache>
被抛出的异常
public class SiteService implements ISiteService {
@Cacheable("cacheSite")
public JsonObject getSiteJson(String siteId, boolean istTranslated) { ... }
}
答案 0 :(得分:0)
@yegdom的评论实际上是正确的答案。添加Cacheable
注释时,Spring会生成一个实现ISiteService
的代理。在代码的某处,你有一个需要SiteService
的bean,即实现。
有三种解决方案(按优先顺序):
ISiteService
proxy-target-class="true"
添加到cache:annotation-driven
,告诉Spring创建一个类代理我真的不推荐最后一个,因为你应该总是依赖于接口或总是依赖于类(并删除接口)。不是两个在同一时间。