2016-03-04 66 views
0

我試圖讀取一個固定長度的文本文件並使用spring批處理將其註冊到數據庫,但輸入文件一般佈局是嵌套的,就像(列表添加只是爲了簡化可視化):Spring批處理ItemReader處理樹結構化文件

FILE HEADER 
    ENTERPISE1 HEADER 
     DEPARTMENT1 HEADER 
      WORKER1 
      WORKER2 
     DEPARTMENT1 FOOTER 
     DEPARTMENT2 HEADER 
      WORKER3 
     DEPARTMENT2 FOOTER 
    ENTERPRISE1 FOOTER 
    ENTERPRISE2 HEADER 
     DEPARTMENT3 HEADER 
      WORKER4 
     DEPARTMENT3 FOOTER 
    ENTERPRISE2 FOOTER 
      . 
      . 
      . 
FILE FOOTER 

文件必須被導入到與表和關係,如數據庫。

TABLE  RELATION TABLE 

ENTERPRISE (ONETOMANY) DEPARTMENTS 
DEPARTMENT (ONETOMANY) WORKERS 

在其他Spring Batch的項目,我已經實現,我們使用了相同的佈局,regiters文件與字段指的是它們所屬的關係。在這種情況下,寄存器的類型由行的第一列上的「id」和「樹」結構的關係來標識。 是否有任何可以幫助完成此任務的彈出即用型ItemReader?我得到的解決方案是構建一個自定義ItemReader,它讀取企業註冊並不斷讀取構建部門和工作對象的行,並返回一個Enterprise對象,所有部門和工作人員立即寫入數據庫,但我不知道是否當工作人員和部門的人數過高時(使用JPA寫入數據庫)會進行擴展。

在此先感謝您的幫助。

回答

0

我最終從彈簧批次樣本項目here中提出了一個與我的叉子上的玩具示例非常相似的解決方案。

希望這可以幫助有類似問題的人。

1

您可以閱讀兩次。首先,讀取行,添加到數據庫。在第二步中,再讀一遍,將關係更新到數據庫中,將自企業和部門的值保存到自定義的ItemReader中。

+0

因爲我必須處理許多文件,每個文件都有一個企業樹,所以我立即讀完整個企業,使用已經存在的框架JpaWriter安裝關係並寫入數據庫 – guilhermerama