У меня Service.class с start()
методом:
public ResponseEntity<Object> start() {
List<Company> companiesList = dbHandler.retrieveCompaniesList();
Company company = null;
for (int i = 0; i < companiesList.size(); i++) {
asychronous.webScrapAndSaveInDb(companiesList, i, company);
}
return null;
}
У меня Asynchronous.class с асинхронным методом webScrapAndSaveInDb()
.
@Async("threadPoolTaskExecutor")
public CompletableFuture<Void> webScrapAndSaveInDb(List<Company> companiesList, int i, Company company, String bankierEndpoint) {
log.info("Asychronous method has started " + i +" time");
company = companiesList.get(i);
company = newsUtils.newsWebScrap(company, endpoint);
return null;
}
Работает параллельно только с методом log.info()
внутри. Поэтому настройка должна быть выполнена правильно. Почему метод webscraping (newsWebScrap()
) не работает параллельно? Как заставить это работать?
Это мой NewsUtils.class с newsWebScrap()
методом, который списывает список строк с сайта:
public Company newsWebScrap(Company company, String endpoint) {
System.setProperty("webdriver.gecko.driver", geckoDriverPath);
List<ReadedNewsObject> readedBessaOrHossaObjectsList = new LinkedList<ReadedNewsObject>();
Double actualPriceDouble = tradingUtils.getActualPrice(company);
WebDriver driver = new FirefoxDriver();
driver.get(endpoint + company.getCompanyNames().get(0));
WebElement boxContent = driver.findElement(By.cssSelector("div.boxContent.boxList"));
WebElement ulElement = boxContent.findElement(By.tagName("ul"));
List<WebElement> listNewsElements = ulElement.findElements(By.tagName("li"));
for (int j = 0; j < listNewsElements.size(); j++) {
WebElement aElement = listNewsElements.get(j).findElement(By.tagName("a"));
String newsStringWithData = aElement.getText();
String newsString = newsStringWithData.substring(11);
ReadedNewsObject readedNewsObject = new ReadedNewsObject();
readedNewsObject.setNewsString(newsString);
readedBessaOrHossaObjectsList.add(readedNewsObject);
}
company.setReadedNewsObjectsList(readedBessaOrHossaObjectsList);
driver.close();
return company;
}