1

注釈ベースの構成に移行する必要がある spring-batch xml ベースの構成があります。

しかし、チャンクをタスクレット定義に定義する解決策が見つかりません。

私のxmlとコードベースの宣言があります:

 <step id="files2Memory">
        <tasklet>
            <chunk reader="pointFileReader" processor="pointFileProcessor"
                   writer="pointFileWriter" commit-interval="50000"/>
        </tasklet>
</step>

public Step files2Memory() {
    return stepBuilders.get("files2Memory")
            .tasklet(new Tasklet() {
                @Override
                public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                    return null;
                }
            })
            .chunk(50000)
            .reader(new PointFileReader())
            .writer(new PointFileWriter())
            .processor(new PointFileProcessor())
            .build();
}

よろしくお願いします

4

2 に答える 2

3

PointFileReader と PointFileWriter PointFileProcessor を @Component でマークし、必要に応じて @Scope("step") を使用します。コンポーネントスキャンがそれらをカバーしていることを確認してください。

バッチ構成ファイルで、上記を自動書き込みしました。

@Autowired
private PointFileWriter pointFileWriter ;
@Autowired
private PointFileReader  pointFileReader ;
@Autowired
private ItemProcessor<TypeFromReader, TypeForWriter> pointFileProcessor ;

@Autowired
private PlatformTransactionManager transactionManager;
...
@Bean
protected Step files2Memory(){
        return steps
        .get("files2Memory")
        .transactionManager(transactionManager)
        .<TypeFromReader, TypeForWriter> chunk(5000)
        .reader(pointFileReader )
        .processor(pointFileProcessor)
        .writer(pointFileWriter).build();
    }

PointFileReader および PointFileWriter PointFileProcessor のいずれかを PointFileReader および PointFileWriter PointFileProcessorPointFileReader および PointFileWriter @Component として指定できない場合は、それらを @Beans として定義し、フィールドをメソッド呼び出しで置き換えることができます。

例えば

@Bean
protected ItemReader<TypeFromReader> pointFileReader()  {
        PointFileReader <TypeFromReader> reader = new PointFileReader <TypeFromReader>();
        reader.set(...)
        return reader;
}
于 2014-11-13T13:22:00.533 に答える
1

.tasklet 部分を削除するだけで、タイプセーフにしたい場合は使用します.<TypeFromReader, TypeForWriter>chunk

.tasklet はカスタム タスクレット用であり、.chunk は (隠された) チャンクベースの実装を既に提供しています

于 2014-11-13T12:13:56.657 に答える