我一直在使用Spring Cache抽象和ehCache。我在目标方法上使用@Cacheable注释,如下所示:
@Component
public class DataService {
@Cacheable(value="movieFindCache", key="#name")
public String findByDirector(String name) {
return "hello";
}
}
public class ServiceTest extends AbstractJUnit4SpringContextTests{
@Resource
private DataService dataService;
@Test
public void test_service() {
System.err.println(dataService.findByDirector("Hello"));
}
}
java.lang.IllegalArgumentException: Null key returned for cache operation (maybe you are using named params on classes without debug info?) CacheableOperation[public java.lang.String com.eliteams.quick4j.web.service.ExcelDataService.getCarData()] caches=[movieFindCache] | key='#name' | condition='' | unless=''
at org.springframework.util.Assert.notNull(Assert.java:112)
at org.springframework.cache.interceptor.CacheAspectSupport.generateKey(CacheAspectSupport.java:315)
at org.springframework.cache.interceptor.CacheAspectSupport.collectPutRequests(CacheAspectSupport.java:265)
<cache:annotation-driven cache-manager="cacheManager"/>
<bean id="ehCacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
p:configLocation="classpath:ehcache.xml" p:shared="true"/>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
p:cacheManager-ref="ehCacheManagerFactory"/>
<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="movieFindCache"
maxEntriesLocalHeap="10000"
maxEntriesLocalDisk="1000"
eternal="false"
diskSpoolBufferSizeMB="20"
timeToIdleSeconds="300" timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LFU"
transactionalMode="off">
<persistence strategy="localTempSwap" />
</cache>
注意:如果我没有在@cacheable注释中指定“key”,那么它可以工作。
有什么我忘了说明的吗?配置?注释?
您可以尝试用#P0替换key
@Component
public class DataService {
@Cacheable(value="movieFindCache", key="#p0")
public String findByDirector(String name) {
return "hello";
}
}
来自Spring缓存抽象的引用VS接口VS密钥参数(“为缓存操作返回NULL密钥”错误)
问题内容: 我的任务是利用SpringCache作为我们的一项服务,以减少数据库查找的次数。在测试实现时,我注意到一些可缓存操作通过日志语句多次调用。调查显示,如果在可缓存的方法中调用了可缓存的操作,则嵌套操作根本不会被缓存。因此,嵌套操作的后续调用将导致进一步的查找。 下面列出了描述问题的简单单元测试: 这两种方法的实际工作对于测试用例本身并不重要,因为仅应测试缓存。 我以某种方式理解了为什么不
. 请注意,IAddItMethod不是指定@Cacheable的方法。我们可以有没有@Cacheable注释的其他实现(例如MethodImplThree)。 我们有一个简单的beans.xml: 有什么我忘了具体说明的吗?配置?注释? 提前感谢!
. 注意IAddItMethod不是指定@Cacheable的那个。我们可以有其他实现(如MethodImplThree)而不使用@Cacheable注释。 我们有一个简单的beans.xml,其中包含: 有什么我忘了说明的吗?配置?注释? 提前道谢!
根据JSON规范,表示null值的正确方法是文字。 预期结果: 实际结果:
我有一个动作,生成一个密码重置链接,并电子邮件给用户 是什么导致web服务器决定内容不变并返回HTTP 304? 我知道有个办法 https://stackoverflow.com/a/18620970/141172 注意:我在上面将localhost更改为local,因为StackOverflow不允许发布包含localhost的链接:-) 浏览器是Internet Explorer10。
问题内容: 据我了解,当JSF操作返回(空字符串)时,用户停留在当前页面上,但视图已刷新。但是,当操作返回时,用户仍停留在当前页面上,但旧视图已被重用。我的问题是: 上面的陈述正确(准确)吗? 如果是,那么这意味着什么?具体来说,使用一种对另一种对页面上的数据(例如,JSF UI组件中的值或存储在DataTable中的请求范围Bean中的数据)有什么影响? 在什么情况下应该使用一种而不是另一种?