jetcache @Cached注解使用key SpEL表达式,注解作用在接口上时失效。

qyzbxkaa  于 4个月前  发布在  其他
关注(0)|答案(9)|浏览(72)

说下环境:macOS , JDK 1.8.0_202
jetcache 版本:2.6.7

@Cached(name = CacheConstant.USER_BASE_INFO_KEY_PREFIX, key = "#userId", cacheType = CacheType.BOTH, localExpire = 30, expire = 300, localLimit = 200) UserBaseBO getUserBaseByUserId(Long userId);
如上,如果作用在接口方法上,这样缓存作用失效,每次都会进入到方法体内。感觉是存在bug。
但是如果去掉自定义spEL表达式,是成功的。或者将上述注解,放到实现类中,缓存也是有效的。
即:
//作用在接口方法上,有效。 @Cached(cacheType = CacheType.BOTH, localExpire = 30, expire = 300, localLimit = 200) UserBaseBO getUserBaseByUserId(Long userId);

//作用在实现类方法上,也是有效。 @Cached(name = CacheConstant.USER_BASE_INFO_KEY_PREFIX, key = "#userId", cacheType = CacheType.BOTH, localExpire = 30, expire = 300, localLimit = 200) public UserBaseBO getUserBaseByUserId(Long userId){ //some code }

是什么原因呢

camsedfj

camsedfj1#

我猜你的接口做javac编译的时候没有指定-parameters参数

ykejflvf

ykejflvf2#

我猜你的接口做javac编译的时候没有指定-parameters参数

被你说中了,是没加。但@cached作用在实现类上是可以的,是不是作用在实现类上就不用加-parameters参数了。

6uxekuva

6uxekuva3#

注解在接口上或者在类上都可以,但都需要-parameters参数,否则你编译出来的class文件里面没有参数名称,就无法工作了。

bzzcjhmw

bzzcjhmw4#

注解在接口上或者在类上都可以,但都需要-parameters参数,否则你编译出来的class文件里面没有参数名称,就无法工作了。

我没加-parameters 时,如果注解作用在实现类上,缓存是正常工作的。只是加在接口上时无法生效。

jvidinwx

jvidinwx5#

你的接口和实现类编译设置不一样吧,或者行参名称也可以不一样

7nbnzgx9

7nbnzgx96#

你的接口和实现类编译设置不一样吧,或者行参名称也可以不一样

一样的,我只是把注解挪了一个地方。其他没有任何改动。参数名称也是一样。

5lhxktic

5lhxktic7#

那你得给出一个可以重现的案例了,要完整的,可运行的

gk7wooem

gk7wooem8#

那你得给出一个可以重现的案例了,要完整的,可运行的

就是上面开头的例子,我在本地idea中运行,只要把注解从接口换到实现类,就能走缓存,命中缓存。

ahy6op9u

ahy6op9u9#

那好吧,我认为没有问题。这个讨论就此结束了。

相关问题