所以我的应用程序(spring-boot(运行非常慢,因为它使用Selenium来抓取数据、处理数据并在主页中显示。我遇到了多线程,我认为让它更快地运行对我的应用程序很有用,但教程似乎显示在带有main的普通java应用程序的设置中。如何在我的控制器中对这个单一方法进行多线程处理?
方法得到。。都是硒的方法。我想同时运行这4行代码
@Autowired
private WebScrape webscrape;
@RequestMapping(value = "/")
public String printTable(ModelMap model) {
model.addAttribute("alldata", webscrape.getAllData());
model.addAttribute("worldCases", webscrape.getWorlValues().get(0));
model.addAttribute("worldDeaths", webscrape.getWorlValues().get(1));
model.addAttribute("worldPop", webscrape.getWorlValues().get(2));
return "index";
}
对于RequestMapping的每个请求,都会创建一个新的线程,因此您想要实现的目标已经存在。请看一下:
https://www.oreilly.com/library/view/head-first-servlets/9780596516680/ch04s04.html
如果你出于其他原因想使用多线程,你可以找到以下有用的方法:
@SpringBootApplication
@EnableAsync
public class ExampleSpringBootApp {
@Bean
public TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(2);
executor.setMaxPoolSize(5);
executor.setQueueCapacity(25);
return executor;
}
public static void main(String[] args) {
//some code
}
}
这将为您创建线程池,您可以将其与任务一起提供。
更多信息和指南:
https://spring.io/guides/gs/async-method/
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/task/TaskExecutor.html