【发布时间】:2021-03-26 11:06:49
【问题描述】:
这是我的问题,我创建了一个服务类,用于处理将文件从输出文件夹上传到云端。在这个输出文件夹内,触发时会产生大量文件。
以下是我的服务等级。
@Service
Public class uploadService {
public void UploadAllFile(String processCode) {
if (processCode = "allfile") {
1 //no need check generate status, start to upload while files generating
//keep upload files while generate process ongoing, until finish generate.
uploadPDF();
2 //check other type of files generate status, wait all finish just start upload.
ReadFileGenerateLog;
if (log.contain("txt") == "all finish generate") {
uploadTxt();
}
if (log.contain("xml") == "all finish generate") {
uploadXml();
}
}
}
public void UploadPDF(){
}
public void UploadTxt(){
}
public void UploadXml(){
}
}
现在的问题是需要生成和上传几百个 PDF 文件,整个过程需要 1 小时 smtg 完成(上传时仍然生成直到完成)。而其他类型的文件则需要 10 分钟完成(等到完成生成和上传)。
所以根据我的代码逻辑,不可能等待 [1] 函数完成然后才启动 [2] 函数。无论如何,我可以同时运行两个逻辑而不是等待第一个逻辑完成吗?请教我解决这个问题。
【问题讨论】:
-
一如既往,没有一种解决方案。一种可能性是使用反应流。看这里spring.io/reactive。另一种解决方案是使用 Spring Batch。
-
你能在 Java 中检查 ExecutorService 吗?您需要一个线程池来管理有限数量的线程来处理文件。
-
CompletableFuture 怎么样? baeldung.com/java-completablefuture
标签: java spring spring-boot asynchronous