下面是我的 spring 批處理作業(yè)的配置,它從數(shù)據(jù)庫中獲取記錄,在項目處理器中進行一些處理,更新狀態(tài)列并寫回數(shù)據(jù)庫。當我運行 10k 條記錄時,我可以看到它一條一條地獲取每條記錄并以相同的方式更新狀態(tài)。最初我打算使用多線程,但這沒有任何意義,因為我的工作每天運行一次,記錄數(shù)量從 10 到 100k 不等。(記錄在大多數(shù)情況下少于 5k,一年中的少數(shù)幾天(5 到 10 天)達到 50k 到 100k)。我不想在一年中的 10 天里增加更多的 CPU 并被 Kubernetes 收費?,F(xiàn)在的問題是,當我運行這項工作時,它只需要 100 條記錄,它獨立運行每個選擇查詢,而不是一次需要 100 條。一次更新也是一條記錄,處理 10k 條記錄需要 10 分鐘,這真的很慢。如何進行更快的讀取、處理和寫入?我可以擺脫多線程并偶爾獲得更多的 CPU 利用率。更多信息在代碼中作為注釋給出。
2 回答
手掌心
TA貢獻1942條經(jīng)驗 獲得超3個贊
謝謝大家的建議。我自己發(fā)現(xiàn)了這個問題。我正在使用 JdbcPagingItemReader 和 RepositoryItemWriter。閱讀器按預期工作,但編寫器正在為處理器后傳遞的每條記錄觸發(fā)選擇查詢。我相信背后的原因是,由于閱讀器不是標準的 JPA 閱讀器,因此該記錄僅在處理器之后才會持久保存到 JPA。不過我不確定。但是將編寫器更改為 JdbcBatchItemWriter 解決了這個問題。
添加回答
舉報
0/150
提交
取消
