Как создать ключ кеша с JCache? - PullRequest
       11

Как создать ключ кеша с JCache?

0 голосов
/ 15 сентября 2018

У меня есть приложение Spring Boot, использующее аннотации Spring Caching. Теперь я хочу перейти на аннотации JSR-107 (JCache).

Это мой метод:

@Cacheable(value = "results", key = "#input.id")
public CalculatorResult calculate(CalculatorInput input, Operation operation) { 
    // Code omitted for simplicity
}

И я хочу, чтобы мой новый метод был примерно таким:

@CacheResult(cacheName = "results")
public CalculatorResult calculate(@CacheKey CalculatorInput input, Operation operation) {
    // Code omitted for simplicity
}

Класс CalculatorInput:

public class CalculatorInput {
    private String id;
    private Double num1;
    // Getters and setters omitted for simplicity
}

Аннотация @CacheKey указывает пружине хранить весь объект CalculatorInput в качестве ключа. Я хотел бы использовать в качестве ключа только идентификатор атрибута класса CalculatorInput.

Как я могу создать ключ кеша (как я делал с аннотацией кеширования Spring), но используя JCache?

Спасибо.

1 Ответ

0 голосов
/ 15 сентября 2018

Добавьте атрибут cacheKeyGenerator к аннотации @CacheResult. Напишите класс, реализующий CacheKeyGenerator ( пример ) и используйте его в аннотации. Метод генератора generateCacheKey получает объект контекста, который дает вам доступ к значениям параметров вызова кэшированного метода, из которых вы, очевидно, можете извлечь нужный ключ.

...