Из-за того, что я до сих пор не нашел полностью удовлетворительное и реактивное решение для моего topi c: click , основным предположением которого было:
How to run a Web Flux method cyclically in a reactive way?
Я нашел обходной путь, чтобы сделать это реальным, используя аннотацию @Scheduled
. Реализация ниже:
@Component
@AllArgsConstructor
public class Covid19APIHandler {
private Covid19APIService apiService;
private CountryCasesHistoryRepository repository;
private CountryCasesWrapperRepository countryCasesWrapperRepository;
private ServerRequest serverRequest;
public Mono<Void> getCountryCasesAndSave(ServerRequest serverRequest) {
return apiService
.findCasesByCountry()
.flatMap(
wrapper ->
countryCasesWrapperRepository
.save(
CountryCasesWrapper.builder()
.countries_stat(wrapper.getCountries_stat())
.statistic_taken_at(wrapper.getStatistic_taken_at())
.build())
.then(Mono.empty()));
}
@Scheduled(fixedDelay = 10000)
public void casesByCountryScheduled() {
getCountryCasesAndSave(serverRequest);
}
}
Проблема в том, что при выполнении кода я получаю сообщение об ошибке:
Description:
Parameter 3 of constructor in com.covid.application.Covid19APIHandler required a bean of type 'org.springframework.web.reactive.function.server.ServerRequest' that could not be found.
Action:
Consider defining a bean of type 'org.springframework.web.reactive.function.server.ServerRequest' in your configuration.
Я пробовал ключевое слово final
с @RequiredArgsConstructor
, генерируя все аргументы. конструктор через IntelliJ
, но мое поле ServerRequest
не инициализировано. Здесь возникает вопрос, как создать мой пользовательский компонент ServerRequest
и правильно его инициализировать. Буду благодарен за предложения о том, как это сделать.