簡體   English   中英

如何從Java的后台服務發送POST請求?

[英]How can I send POST requests from a background service in Java?

我目前正在使用Java應用程序,該應用程序從表A讀取(已存儲BLOB),將一些數據從表A寫入表B,同時將BLOB數據上傳到文件服務器。 我在一個測試數據庫(大約400行)上測試了該應用程序,並且運行良好。 我需要將應用程序實現為后台服務,該服務讀取表A並將HTTP POST請求發送到REST服務器,然后插入到表B並上傳到文件服務器。 POST請求后,服務器需要返回創建的HTTP 202。 我嘗試過這樣的事情:

@POST
@Path("attachments")
public void moveToMinio() throws Exception {
    TiedostoDaoImpl tiedostoDao = new TiedostoDaoImpl();
    List<Integer> id = tiedostoDao.getDistinctCustomerId();
    for (Integer userId : id){
    AttachmentService.insertAndUploadService(userId);
    }
}

tieostoDao.getDistinctCustomerId()返回表A中不同的客戶ID的列表,並將該ID傳遞給for循環內的AttachmentService.insertAndUploadService()。 這樣就可以完成工作,但是我懷疑這不是正確的方法,因為它返回HTTP 200而不是202。這是發送POST請求的正確方法嗎? 生產數據庫可能有數百萬行,在不影響服務器效率的情況下處理所有這些行的正確方法是什么? 因為我是Java新手,所以我對此一直停留了一段時間,並且非常感謝您的幫助/建議。

如果要在處理完每一行后都需要http響應,則首先需要將您的方法划分為一次處理一行,然后可以使用Response來包含您的http代碼和實體,如下所示:

@POST
@Path("attachments")
public Response moveToMinio() throws Exception {
    TiedostoDaoImpl tiedostoDao = new TiedostoDaoImpl();
    Integer userId = tiedostoDao.getOneCustomerId();
    String uploadLink = AttachmentService.insertAndUploadService(userId);

    return Response.status(Response.Status.ACCEPTED).entity(uploadLink).build();
}

請參考此如何在基於servlet的Web應用程序中運行后台任務?

在返回響應之前,將作業放入全局隊列,然后讓后台進程執行該作業。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM