Spring 每个页面的可分页缓存键

Spring pageable cache key for each page

我正在尝试执行以下操作

@Cacheable(value = ACTIVE_DATA_CONFIGURATION_CACHE, key = "#tenant.id.concat('-').concat(#pageable.page)")
    public Page<DataConfiguration> findAllByTenant(final Pageable pageable, final Tenant tenant) {
    }

异常

org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'page' cannot be found on object of type 'org.springframework.data.domain.PageRequest' - maybe not public?
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:224)

对于您的用例,请尝试使用 KeyGenerator

@Cacheable(value = "doOneThing", keyGenerator = "CustomGenerator")

像这样:

public class CustomGenerator implements KeyGenerator {

 public Object generate(Object target, Method method, Object... params) {
    String code = "UNIQUE_CODE"; // implements logic from params
    return code;
 }

}

由于 Pageable 没有 属性 页面,如果您尝试将键生成为 {tenant.id}-{pageNumber},您可以将键值更改为 #tenant.id.concat('-').concat(#pageable.pageNumber)