Весеннее кеширование pojo getters - PullRequest
0 голосов
/ 09 мая 2018

Я работаю над системой аукционов, в которой стоимость продукта должна пересчитываться каждые n минут. Я успешно реализовал ehcache с помощью весенней загрузки на своем контроллере и уровнях обслуживания, теперь я собираюсь кэшировать некоторые методы получения суперкласса модели, но @Cacheable не работает с методом getCurrentPrice () (я также попытался указать имя и ключ кэша) , Может быть, кеш Spring не предназначен для этой цели? Мне нужно вручную управлять кешем для getPrice (), использовать собственный кеш, или я что-то не так делаю?

public abstract class PricedEntity{

public abstract void getInfo();

@Cacheable
public Price getCurrentPrice(){}
//...my code here...long task computation(about 0.3 seconds) 
//the price is variable every 5/10 minutes due to bid/ask and USD/EUR change value

} }

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Я должен работать. Какие аннотации у вас есть в вашем классе? Например, @Cacheable может конфликтовать с @Async.

Кроме того, его нужно вызывать извне. Вы не можете сделать this.getCurrentPrice(). Он не будет проходить через прокси, выполняющий кеширование.

0 голосов
/ 10 мая 2018

@ Cacheable предназначен для работы с управляемыми компонентами Spring. Он будет работать в классе, который вы создаете сами.

Либо перенесите расчет цены в отдельный компонент и сделайте его кэшируемым, либо запомните рассчитанное значение после первого вызова метода.

0 голосов
/ 09 мая 2018

Вы добавили @EnableCaching в конфигурацию приложения Spring Boot? Как здесь:

@SpringBootApplication
@EnableCaching
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}
...