spring batch ItemReader FlatFileItemReader set cursor zu Lesen beginnen aus einer bestimmten Zeile oder einer Reihe linestoskip dynamisch

In meinem springbatch+Quarz-setup, ich lese eine CSV-Datei mit FlatFileItemReader. Ich möchte, um den cursor für den Leser bis zum start des nächsten jobinstance mit den gegebenen Parametern für Leser. Ist es möglich?

<bean id="cvsFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
    <!-- Read a csv file -->
    <property name="resource" value="classpath:cvs/input/report.csv" />

    <property name="lineMapper">
        <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
            <property name="lineTokenizer">
                <bean
                    class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                    <property name="names" value="id,impressions" />
                </bean>
            </property>
            <property name="fieldSetMapper">
                <bean
                    class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                    <property name="prototypeBeanName" value="report" />
                </bean>
            </property>
        </bean>
    </property>

</bean>

Die Idee ist, Lesen Sie weiter die Datei wo der Letzte Fehler auftrat in der nächsten Ausführung. Ich bin putting ein integer 'writecursor' für jede Zeile geschrieben in meinem customWriter.

public void write(List<? extends Report> items) throws Exception {

System.out.println("writer..." + items.size() + " > ");     
for(Report item : items){
    System.out.println("writing item id: " + item.getId());     
    System.out.println(item);

}
//getting stepExecution by implementing StepExecutionListener
this.stepExecution.getExecutionContext().putInt("writecursor", ++writecursor);

}

Nun, in der customItemReadListener, ich möchte das update writecursor Wert, und überspringen Sie dann die Zeilen von oben zu Lesen beginnen aus writecursor

public class CustomItemReaderListener implements ItemReadListener<Report>, StepExecutionListener {

    ApplicationContext context = ApplicationContextUtils.getApplicationContext();
    private StepExecution stepExecution;
    @Override
    public void beforeRead() {
        //Skip lines somehow
    }

Andere Sache, die ich sah, wie eine mögliche Lösung ist, um linestoskip dynamisch in itemreader. Es gibt einen thread hier http://thisisurl.com/dynamic-value-for-linestoskip-in-itemreader aber noch nicht geantwortet. Und hier,
http://forum.spring.io/forum/spring-projects/batch/100950-accessing-job-execution-context-from-itemwriter

  • möglich, Duplikat der Spring batch job csv-Datei Lesen, erholen sich von der Linie, wo es fehlgeschlagen
  • Ja, möglich duplizieren. Ich habe versucht, mit linestoskip Eigentum der Leser. Aber jetzt denke ich, intead speichern der cursor-Wert in stepexecution, die ich brauche, um es zu speichern in jobexecutioncontext als cursor-Wert wird zurückgesetzt, in den nächsten jobexecution. Wie Sie Zugang zu jobexecutioncontext in ItemReader/Processor/ - Writer?
  • Check meine Antwort. Aber IMHO sind Sie nur replizieren ein SB built-in-Funktion
  • Ich bin Art von versuchen, um eine benutzerdefinierte spring batch admin mit Quarz, so muss zum überschreiben der verschiedenen Szenarien und einfügen meiner eigenen Logik
InformationsquelleAutor Usersbs | 2014-01-31
Schreibe einen Kommentar