@ Запланировано из контроллера - PullRequest
0 голосов
/ 30 мая 2018

У меня есть приложение Spring-Boot.с этим абстрактным контроллером

public abstract class ElCorDeLaCiutatController {
     static Double price = 0.0;     

     @Autowired
     PriceService priceService;

     @Scheduled(fixedRate = 1000 )
     private void updatePrice() throws DataAccessException, SQLException, ClientProtocolException, IOException {        
        price = getPrice();
     }
}

Где я хочу обновлять цену каждую секунду, потому что цена является общим значением, общим для всех контроллеров, но я вижу, что этот метод вызывается примерно 14 раз в секунду...

может быть для всех контроллеров, расширяющих этот абстрактный контроллер?

Есть ли способ избежать этого?

Ответы [ 2 ]

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

Расширение этого класса может вызвать проблемы.Кроме того, наличие такого статического поля для распределения значения между классами не самое большое.

Я думаю, что лучшим подходом было бы перенести цену на ценовое обслуживание.В любом случае это статическое значение, поэтому оно одинаково для всех контроллеров.Просто переместите его в сервис и перенесите запланированное задание туда.Позвольте сервису позаботиться об этой цене (и всех других частях бизнес-логики), и в контроллерах получите текущее значение, когда вам это нужно.Вы также раздельно сохраняете различное назначение разных слоев следующим образом.

Что-то вроде:

class PriceService{

Double price = 0.0; 

getCurrentPrice(){
  return price;
}

@Scheduled
updatePrice(){
.. do something here
}

}

А в контроллерах, когда вам нужна текущая цена, вы просто используете priceService.getCurrentPrice(); извнедренный сервис без каких-либо статических полей и без сохранения состояния в контроллерах

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

Я бы поместил эту цену и график в отдельный компонент и сослался бы на него как на статический член ElCorDeLaCiutatController.

...