Кэширование происходит по двум возможным сценариям
- При вызове метода
- Вручную поместите объект в кэш
по примеру в вашем вопросе, давайте разберемся в методе ниже
@Service
public class NumberService {
// ...
@Cacheable(
value = "squareCache",
key = "#number",
condition = "#number>10")
public BigDecimal square(Long number) {
BigDecimal square = BigDecimal.valueOf(number)
.multiply(BigDecimal.valueOf(number));
log.info("square of {} is {}", number, square);
return square;
}
}
Метод square будет кэшировать результат для всех входных данных (скажем, от 1 до 10), если вы хотите, чтобы он кэшировалсяквадрат всех возможных входных значений, все, что вам нужно сделать, вызвать метод со всеми возможными значениями. Вы можете сделать это при запуске.
Этот URL Как загрузить @Cache при запуске весной? поможет вам
Ниже приведен один пример
@Service
public class NumberCacheScheduler {
@Autowired
NumberService numberService;
@PostConstruct
public void init() {
update();
}
public void update() {
for (long l=1l; i <=10,l++) {
numberService.square(l);
}
}
}