2016-03-30 12 views
0

okuyun. Bahar Toplu tüm öğelerinde alan değeri doldurma FlatFileItemReader/çizgiler Bahar toplu <code>FlatFileItemReader</code> kullanarak düz bir dosya okuyorum

Ben düz dosyadan okunan tüm kayıtlar için benzersiz bir değerle doldurmak için gereken bir requestId alanı var. Örn: Dosyayı okurken. RequestId alanında oluşturulan tüm Item nesneleri için requestId değerini 1 olarak ayarlamak istiyorum. dosya2'nin için, ben 2.

benim RequestID benzersiz ayrı sınıfa tarafından oluşturulan için RequestID ayarlamanız gerekir.

Nasıl bu kullanarak bahar toplu elde edebilirsiniz?

cevap

0

bazı olası çözümler

bir Listener kullandığım bir ResourceAware Öğe

public class MyItem implements ResourceAware { 

    private Resource resource; 

    public String getId() { 
     return createIdFromResource(resource); 
    } 

    private String createIdFromResource(final Resource resource) { 
     // create your ID here 
     return resource.getFilename(); 
    } 

    @Override 
    public void setResource(final Resource resource) { 
     this.resource = resource; 
    } 
} 

kullanmak vardır içinde

public class TestListener implements StepExecutionListener, ItemReadListener<String> { 
    private StepExecution stepExecution; 
    private static final String CURRENT_ID = "currentId"; 

    @Override 
    public void beforeStep(final StepExecution stepExecution) { 
     this.stepExecution = stepExecution; 
    } 

    @Override 
    public ExitStatus afterStep(final StepExecution stepExecution) { 
     return null; 
    } 

    @Override 
    public void beforeRead() { 
    } 

    @Override 
    public void afterRead(final String item) { 
     String currentId = null; 
     if (stepExecution.getExecutionContext().containsKey(CURRENT_ID)) { 
      currentId = stepExecution.getExecutionContext().getString(CURRENT_ID); 
     } else { 
      String fileName = stepExecution.getExecutionContext().getString("fileName"); 
      // ... create ID from FileName 
      currentId = fileName + "foo"; 
      stepExecution.getExecutionContext().put(CURRENT_ID, currentId); 
     } 
    } 

    @Override 
    public void onReadError(final Exception ex) { 
    } 
} 

(arayüzlerle burada, ek açıklamaların az ayrıntılı kullanımı çok mümkündür) Yukarıdaki örnekte geçerli dosyaAdı adımExecutionContext'te kullanılabilir, işParametrelerden çekip çıkarmanız gerekebilir. t Dosya adı

String paramValue = stepExecution.getJobExecution().getJobParameters().getString("paramName"); 
// extract fileName from paramValue 
+0

StepListener'ı kullandım ve bir güzellik gibi çalıştı. Teşekkürler –