gpt4 book ai didi

java - JCache键异常

转载 作者:太空宇宙 更新时间:2023-11-04 09:26:05 24 4
gpt4 key购买 nike

我有一个必须缓存的方法。我有一个带有 JSR-107 (JCache) 缓存的 SpringBoot 2.1.7 应用程序。使用的缓存实现:EHCache 3.8.0。

@Override
@HystrixCommand(fallbackMethod = "fallbackGetAllUserProfiles")
@Timed(histogram = true, percentiles = {0.75, 0.9, 0.95, 0.99})
@CacheResult
public UserProfiles getAllUserProfiles(@CacheKey String accountID, @CacheKey String userID) {
return getAllUserProfilesFromBackend(accountID, userID);
}

该类用 CacheDefaults(cacheName = "profileCache") 进行注释当我在 SpringBoot 入门类上使用注释:@EnableCaching 时,尝试访问该方法时出现此异常:

java.lang.ClassCastException: Invalid key type, expected : java.lang.String but was : org.springframework.cache.interceptor.SimpleKey
at org.ehcache.impl.store.BaseStore.checkKey(BaseStore.java:64) ~[ehcache-3.8.0.jar:3.8.0 98c7461621c490ef009548e61849f925305a631f]
at org.ehcache.impl.internal.store.heap.OnHeapStore.get(OnHeapStore.java:279) ~[ehcache-3.8.0.jar:3.8.0 98c7461621c490ef009548e61849f925305a631f]
at org.ehcache.core.Ehcache.doGet(Ehcache.java:90) ~[ehcache-3.8.0.jar:3.8.0 98c7461621c490ef009548e61849f925305a631f]
at org.ehcache.core.EhcacheBase.get(EhcacheBase.java:127) ~[ehcache-3.8.0.jar:3.8.0 98c7461621c490ef009548e61849f925305a631f]
at org.ehcache.jsr107.Eh107Cache.get(Eh107Cache.java:90) ~[ehcache-3.8.0.jar:3.8.0 98c7461621c490ef009548e61849f925305a631f]
at org.springframework.cache.jcache.JCacheCache.lookup(JCacheCache.java:77) ~[spring-context-support-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.cache.support.AbstractValueAdaptingCache.get(AbstractValueAdaptingCache.java:58) ~[spring-context-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.cache.interceptor.AbstractCacheInvoker.doGet(AbstractCacheInvoker.java:73) ~[spring-context-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.cache.jcache.interceptor.CacheResultInterceptor.invoke(CacheResultInterceptor.java:57) ~[spring-context-support-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.cache.jcache.interceptor.JCacheAspectSupport.execute(JCacheAspectSupport.java:135) ~[spring-context-support-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.cache.jcache.interceptor.JCacheAspectSupport.execute(JCacheAspectSupport.java:112) ~[spring-context-support-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.cache.jcache.interceptor.JCacheInterceptor.invoke(JCacheInterceptor.java:82) ~[spring-context-support-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93) ~[spring-aop-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.1.9.RELEASE.jar:5.1.9.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) ~[spring-aop-5.1.9.RELEASE.jar:5.1.9.RELEASE]

这是缓存规范:

    <cache alias="profileCache">
<key-type copier="org.ehcache.impl.copy.SerializingCopier">java.lang.String</key-type>
<value-type copier="org.ehcache.impl.copy.IdentityCopier">java.util.List</value-type>
<expiry>
<ttl unit="minutes">5</ttl>
</expiry>
<heap unit="entries">10000</heap>
</cache>

当我将注释更改为 @EnableCaching(mode = AdviceMode.ASPECTJ) 时,它确实有效。这是一个错误还是我在这里做错了什么?

最佳答案

如果您对没有任何参数的方法进行缓存但未指定键,则会发生此错误。我通过添加 key 解决了这个错误:

@Cacheable(value = "SomeCacheName", key = "#root.methodName")
public List<Country> getCountries() {
...
return countries;
}

关于java - JCache键异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57703392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com