1

テキスト ファイルを読み込んでマップを作成し、後で参照できるようにそれを ExecutionContext に配置したいと考えています。

ファイルを読み取って処理するためにchunk-processngを使用することから始めようと考えましたが、ファイルに書き込むためにFlatFileItemWriterは必要ありません。ただし、Bean の初期化には、ライターにリソースを設定する必要があります。

私はこれについて間違っていますか?chunk=process は間違ったアプローチですか。タスクレットの作成は賢明ですが、SpringBatch が私のファイルを読み取ってくれるのが気に入りました。タスクレットでは、テキスト ファイルを開いて処理するためのコードを記述する必要があります。右?

続行する方法についてのアドバイスをいただければ幸いです。

4

1 に答える 1

0

私がやったこと(私は新しいです)は、タスクレットを作成し、それに StepExecutionListener インターフェイスを実装させることでした。魅力のように働きました。コンマ区切りのファイルを行単位で読み取り、2 番目の列を抜き出しています。ExecutionContext マップ キーの「列挙型」を作成しました。基本的に、これは以下のとおりです。

public class ProcessTabcPermitsTasklet implements Tasklet, StepExecutionListener {

    private Resource resource;
    private int linesToSkip;
    private Set<String> permits = new TreeSet<String>();

    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext)  throws Exception {

        BufferedReader reader = new BufferedReader((new FileReader(resource.getFile())));
        String line = null;
        int lines = 0;

        while ((line = reader.readLine()) != null) {

            if (++lines <= linesToSkip)
                continue;

            String[] s = StringUtils.commaDelimitedListToStringArray(line);
            permits.add(s[TABC_COLUMNS.PERMIT.ordinal()]);

        }

        return RepeatStatus.FINISHED;
    }

    /**
     * @param file
     *            the file to set
     */
    public void setResource(Resource resource) {
        this.resource = resource;
    }

    /**
     * @param linesToSkip
     *            the linesToSkip to set
     */
    public void setLinesToSkip(int linesToSkip) {
        this.linesToSkip = linesToSkip;
    }


    public ExitStatus afterStep(StepExecution stepExecution) {
        stepExecution.getExecutionContext().put(EXECUTION_CONTEXT.TABC_PERMITS.toString(), permits);
        return ExitStatus.COMPLETED;
    }

} 
于 2013-07-01T17:21:03.323 に答える