Spring Batch:如何创建复合项编写器? [英] Spring Batch: How to create a Composite Item Writer?
问题描述
我在 Spring Boot
应用程序中使用 Spring Batch
.Spring Boot
版本为 1.3.5.RELEASE
.
I am using Spring Batch
in Spring Boot
application. The Spring Boot
version is 1.3.5.RELEASE
.
我正在尝试使用 CompositeItemWriter
以便项目列表首先由 WriterOne 压缩/压缩,然后传递给 WriterTwo,在那里它们将写入数据库.
I am trying to use CompositeItemWriter
so that the list of items will first be compressed/zipped by WriterOne and then be passed to WriterTwo where they will be written in the database.
这是我的作家 1:
@Component
public class Writer1 implements org.springframework.batch.item.ItemWriter<SimpleObject> {
@Override
public void write(List<? extends SimpleObject> list) throws Exception {
for(SimpleObject simpleObject: list){
// code which compresses the file
}
}
}
这是我的作家 2:
@Component
public class Writer2 implements org.springframework.batch.item.ItemWriter<SimpleObject> {
@Override
public void write(List<? extends SimpleObject> list) throws Exception {
for(SimpleObject simpleObject: list){
// the file object meta data are being writtren to database.
}
}
}
这是我尝试初始化任务步骤并为其提供 CompositeItemWriter 而不是 ItemWriter.
Here is I am trying to initializing task-step and providing it a CompositeItemWriter instead of ItemWriter.
CompositeItemWriter compositeItemWriter = new CompositeItemWriter();
compositeItemWriter.setDelegates(Arrays.asList(writer1,writer2));
TaskletStep processingStep = stepBuilderFactory.get(getLabel() + "-" + UUID.randomUUID().toString())
.<SimpleObject, SimpleObject>chunk(5)
.reader(reader)
.processor(processor)
.writer(compositeItemWriter).transactionManager(txManager).build();
然后代码给出编译时错误:
Then the code gives compile time error:
Error:(337, 83) java: cannot find symbol
symbol: method build()
location: class org.springframework.batch.core.step.builder.StepBuilderHelper
推荐答案
以下代码适用于我的情况.
这是我的作家 1:
@Component
public class Writer1 implements ItemStreamWriter<SimpleObject>,org.springframework.batch.item.ItemWriter<SimpleObject> {
@Override
public void write(List<? extends SimpleObject> list) throws Exception {
for(SimpleObject simpleObject: list){
// some logic
}
}
}
@Override
public void open(ExecutionContext executionContext) throws ItemStreamException {
}
@Override
public void update(ExecutionContext executionContext) throws ItemStreamException {
}
@Override
public void close() throws ItemStreamException {
}
}
这是我的作家 2:
@Component
public class Writer2 implements ItemStreamWriter<SimpleObject>, org.springframework.batch.item.ItemWriter<SimpleObject> {
@Override
public void write(List<? extends SimpleObject> list) throws Exception {
for(SimpleObject simpleObject: list){
// some logic
}
}
@Override
public void open(ExecutionContext executionContext) throws ItemStreamException {
}
@Override
public void update(ExecutionContext executionContext) throws ItemStreamException {
}
@Override
public void close() throws ItemStreamException {
}
}
这里我试图初始化 Tasklet
并为其提供一个 CompositeItemWriter
:
Here I am trying to initializing Tasklet
and providing it a CompositeItemWriter
:
CompositeItemWriter<SimpleObject> compositeItemWriter = new CompositeItemWriter<>();
List<org.springframework.batch.item.ItemWriter<? super SimpleObject>> delegates = new ArrayList<>();
delegates.add(writer1);
delegates.add(writer2);
compositeItemWriter.setDelegates(delegates);
TaskletStep processingStep = stepBuilderFactory.get(getLabel() + "-" + UUID.randomUUID().toString())
.<SimpleObject, SimpleObject>chunk(5)
.reader(reader)
.processor(processor)
.writer(compositeItemWriter)
.stream(writer1)
.stream(writer2)
.transactionManager(txManager)
.build();
如果我遗漏了什么或有一些不正确的信息,请告诉我.
Kindly let me know if I missed anything or had some incorrect information.
这篇关于Spring Batch:如何创建复合项编写器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!