【发布时间】:2019-07-20 19:24:50
【问题描述】:
他们有什么办法让我可以利用多线程概念来并行调用执行,并使创建的@RestController 的执行速度更快,它将接受String 和List<MultipartFile> 作为请求参数,代码是工作正常。这里的问题是,如果我通过 for 循环一个接一个地解析一个文件。执行所需的时间更多。
下面是控制器
@RequestMapping(value = "/csvUpload", method = RequestMethod.POST)
public List<String> csvUpload(@RequestParam String parentPkId, @RequestParam List<MultipartFile> file)
throws IOException {
log.info("Entered method csvUpload() of DaoController.class");
List<String> response = new ArrayList<String>();
String temp = parentPkId.replaceAll("[-+.^:,]", "");
for (MultipartFile f : file) {
String resp = uploadService.csvUpload(temp, f);
response.add(resp);
}
return response;
}
从控制器,我正在调用uploadService.csvUpload() 方法,我在使用 For 循环时一个接一个地解析文件。
下面是我的 UploadService 类
public String csvUpload(String parentPkId, MultipartFile file) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(file.getInputStream()));
String line = "";
int header = 0;
while ((line = br.readLine()) != null) {
// TO SKIP HEADER
if(header == 0) {
header++;
continue;
}
header++;
//Use Comma As Separator
String[] csvDataSet = line.split(",");
//Saving it to DB
}catch(IOException ex) {
ex.printStackTrace();
}
return "Successfully Uploaded "+ file.getOriginalFilename();
}
如何使这个控制器成为一个多线程的,以便处理是并行和快速的。我是多线程新手,我尝试使用
Callable接口,但Call()方法不会接受参数。
欢迎任何线索和建议,在此先感谢。
【问题讨论】:
-
不确定但@Async 注解可能会解决您的问题
-
@SHAHAKASH 任何代码位都会帮助我,如果你能提供的话
标签: java multithreading spring-boot threadpool