Die Umsetzung SkipListener zu schreiben, ungültige Datensätze zu einer flachen Datei

Ich arbeite zur Einstellung einer spring-batch-job, der die konventionelle LESEN > PROZESS - > WRITE-operation. Allerdings bin ich versucht zu implementieren eines listener-das würde zu erfassen, Datensätze, die conisdered ungültig während der PROZESS-phase und schreiben Sie es auf eine Fehler-log-Datei.

Mein listener-Klasse wird eine Instanz von FlatFileItemWriter die Daten zu schreiben. Jedoch, spring-batch ist nicht die Instanziierung der writer-Instanz ordnungsgemäß.

Mein listener-Klasse sieht wie folgt aus:

    public class DTOProcessorListener extends SkipListenerSupport<AttributeReportGenerationDTO, AttributeValue> {

    private static final Logger LOGGER = LoggerFactory.getLogger(DTOProcessorListener.class);

    private FlatFileItemWriter<AttributeReportGenerationDTO> flatFileItemWriter;

    @Override
    public void onSkipInProcess(AttributeReportGenerationDTO item, Throwable t) {

        try {
            LOGGER.error("Record not processed for attribute value with ID : " + item.getAttributeValueId());
            List<AttributeReportGenerationDTO> list = new ArrayList<AttributeReportGenerationDTO>();
            list.add(item);
            flatFileItemWriter.write(list);
        } catch (Exception e) {
            LOGGER.error("Unable to write to the error output file", e);
        }
    }

    /**
     * @param flatFileItemWriter
     *            the flatFileItemWriter to set
     */
    public void setFlatFileItemWriter(FlatFileItemWriter<AttributeReportGenerationDTO> flatFileItemWriter) {

        this.flatFileItemWriter = flatFileItemWriter;
    }

}

mein und job-Konfiguration-XML sieht wie folgt aus:

<bean id="skipListener" class="something.DTOProcessorListener" scope="step">
        <property name="flatFileItemWriter">
            <bean id="errorItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
                <property name="resource" value="file:#{jobParameters['error.filename']}" />
                <property name="appendAllowed" value="true" />
                <property name="lineAggregator">
                    <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
                        <property name="fieldExtractor">
                            <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                                <property name="names"
                                    value="productTypeId, productTypeName, productId, productName, skuId, skuName, attributeValueId, attributeName, attributeValue, attributeType, nonEditableValueCheckSum, editableValueCheckSum" />
                            </bean>
                        </property>
                    </bean>
                </property>
                <property name="headerCallback">
                    <bean class="something.CsvHeaderImplementation">
                        <property name="headerString"
                            value="Product Type ID,Product Type,Product ID,Product Name,Sku ID,Sku Name,Attribute Value ID,Attribute Name,Attribute Value,Attribute Type,Check Sum 1,Check Sum 2" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

Bekomme ich die Fehlermeldung

org.springframework.batch.item.WriterNotOpenException: Writer must be open before it can be written to

Ich bin nicht dazu in der Lage einen stream-Eintrag in der job-Konfiguration als die Bohne für FlatFileItemWriter wird intern angegeben (für den Hörer). Wenn ich abean außerhalb der Zuhörer und beziehen sich auf Sie, seine Rückkehr eine proxy-Instanz von der FlatFileItemWriterClass.

Hat jemand erfolgreich verdrahtet Schriftsteller zu einer flachen Datei in den Hörer?

Danke für die Hilfe

InformationsquelleAutor Mahesh | 2011-09-30

Schreibe einen Kommentar