4

ファイルを解析するために春のバッチを使用しています。ItemProcessor では、受信フィールドが正しいかどうかを検証します。そうでない場合は、 ValidationException をスローし、不適切なフィールドを持つ対応する行をファイルに記録したいと考えています。では、ItemProcessor の行数とファイル名を見つけるにはどうすればよいでしょうか。

4

2 に答える 2

1

ItemReaderの設定が表示されない場合、私は本当に確信が持てませんが、FlatFileItemReaderのようなものを使用してcsvを解析している場合、厳密モードの場合は列数が検証されます。

読者が次のようになっていると仮定すると、次のようになります。

<bean id="iItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
    <property name="linesToSkip" value="1"/>
    <property name="comments" value="#" />
    <property name="encoding" value="UTF-8"/>
    <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="delimiter" value=","/>
                    <property name="names">
                        <list >
                            <value>First_Field</value>
                        <value>Second_Field</value>
                        </list>
                    </property>
                    <property name="strict" value="true"/>
                </bean>
            </property>
            <property name="fieldSetMapper">
                <bean class="uk.co.package.FieldSetMapper">
                    <property name="dateFormat" value="yyyy-MM-dd HH:mm:ss"/>
                </bean>
            </property>
        </bean>
    </property>

</bean>

処理できない行に対しては、FlatFileParseExceptionがスローされます。これには行番号が含まれ、リスナーで処理できます。

于 2013-03-01T13:33:57.110 に答える
0

行番号については、独自の LineMapper を構築してから、行番号をビジネス オブジェクトに格納することができます。行番号とともに未処理の行を (そのまま) 保存する例:

    DefaultLineMapper<OneRow> lineMapper = new DefaultLineMapper<OneRow>() {
        @Override
        public OneRow mapLine(String line, int lineNumber) throws Exception {
            return new OneRow(lineNumber, line);
        }
    };

もちろん、すでにオブジェクトをマップできます。プロセッサーへの入力として、行全体を未処理にする必要がありました。

同じ考えの参照として: https://stackoverflow.com/a/23770421/5658642

于 2016-08-30T08:47:40.037 に答える