如何給Cacheable的key加上常量

Cacheable的key加上常量

背景   

由於緩存的註解有類似的前綴,所以抽取出常量。

public static final String KEY_CERT_TYPE_CODE_PREFIX = "ec_cert_type:cert_type_code:";
@Override
@Cacheable(key = KEY_CERT_TYPE_CODE_PREFIX + "+#code")
public EcCertType loadCertTypeByCode(String code) {
    // something
    return type;
}

但是使用時,報錯:

EL1041E: After parsing a valid expression, there is still more data in the expression

經修改,給常量加上單引號,使:不被SpEL解析,解決。

public static final String KEY_CERT_TYPE_CODE_PREFIX = "'ec_cert_type:cert_type_code:'";
@Override
@Cacheable(key = KEY_CERT_TYPE_CODE_PREFIX + "+#code")
public EcCertType loadCertTypeByCode(String code) {
    // something
    return type;
}

springcache key的定義方式

1.不指定key,使用默認key生成器

使用默認key生成器的話,緩存的對象需要實現toString()方法,裡面拼接自己想要作為key的字段。

調用查詢接口之後,緩存中的key如下:

其中TRANSFORMERS-ACT_DICT-KEY是定義的value值,表示放到哪個緩存中。

2.指定key值

運行後key值如下

此時是以傳遞過來的Student對象中的id值作為key。

3.自定義key生成器

引用自定義的生成器

key值如下:

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: