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)
。
我正在尝试执行以下操作
@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)
。