2016-03-22 38 views
0

Spring Batch ile işlenecek birden fazla dosya içeren bir senaryom var.Dosyaları Sil bölümlenmiş adım işlemeden sonra

Bunu bir ana adım ve Partitioner aracılığıyla her bir dosyayı tek tek işleyen bölümlenmiş bir bağımlı adımla uygularım iyi çalışıyor ancak şimdi başarılı bir şekilde işlenen dosyaları arşivlemek/silmek istiyorum.

Ben çeşitli yollar ama hiçbir başarı denedim: Ana adımdan sonra yeni bir adım -in dosyası

üzerinde köle adım StepExecutionListener üzerinde bir AfterStep yöntemiyle -in

ama yazar tutan kilit ama don başarılı bir şekilde işlenen dosya isimlerini nasıl alacağımı bilmiyorum, bu da köle adımları ile paylaşılması gereken bir bilgidir, ayrıca iplik güvenliği de dikkate alınmalıdır. Bu yaklaşım aynı zamanda tüm köle adımlarının bitmesini beklediği dezavantaja sahiptir. peşin

sayesinde Adrian

cevap

0

tüm köle adımlar özelleştirilmiş eğer dosya silme size

public class CustomTasklet implements Tasklet { 

    @Override 
    public RepeatStatus execute(final StepContribution contribution, final ChunkContext chunkContext) throws Exception { 
    Collection<StepExecution> stepExecutions = chunkContext.getStepContext().getStepExecution().getJobExecution().getStepExecutions(); 
    for (StepExecution stepExecution : stepExecutions) { 
     if (stepExecution.getExecutionContext().containsKey("fileName") 
      && ExitStatus.COMPLETED.equals(stepExecution.getExitStatus())) { 

     String file = stepExecution.getExecutionContext().getString("fileName"); 
     // delete file 

     } 
    } 
    } 
} 

ile başarıyla işlenmiş dosya adlarını ulaşabilir başlamadan önce bitmesini beklemek kabul edip MultiResourcePartitioner.keyName,

+0

'un yukarısındaki "dosyaAdı" nı değiştirmelisiniz. Merhaba Michael, Cevabınız için teşekkür ederiz, işe yarıyor. Her köle adımından sonra dosyayı silmek için bir çözüm yok sanırım, bu yüzden bunu kabul etmek zorundayım. –