java - Spring Batch - Pass all data between reader processor and writer -
i'm curious how 1 manage pass available data reader down through pipeline.
e.g. want reader pull data in , pass entire result set down processor , writer. result set small, i'm not worried resources. thought had implemented having of components (reader, writer, processor) receive , return collection of processed item.
while results of process appears fine, seeing job reading in, passing down through pipeline , returns reader, reads , passes down , on.
i've considered creating step read data in , pass down subsequent step, i'm curious if can , how
the job looks like
@bean job job() throws exception { return jobs.get("job").start(step1()).build() } @bean protected step step1() throws exception { return steps.get("step1").chunk(10) .reader(reader() .processor(processor() .writer(writer()).build()
//....
the reader, processor , writer accept , return list, e.g.
class domainitemprocessor implements itemprocessor<list<domain>, list<domain>>{
you implement tasklet. since want process data @ once, not have batch-processing , therefore, whole restart , failurehandling of "normal" springbatch step not used @ all.
a tasklet follows in pseudocode:
@component public class mytasklet implements tasklet { @autowired private itemreader<yourtype> readerspringbeanname; @autowired private itemprocessor<list<yourtype>,list<yourtype>> processorspringbeanname; @autwired private itemwriter<list<yourtype>> writerspringbeanname; repeatstatus execute(stepcontribution contribution, chunkcontext chunkcontext) { readerspringbeanname.open(new executioncontext()); writerspringbeanname.open(new executioncontext()); list<yourtype> items = new arraylist<>(); yourtype readitem = readerspringbeanname.read(); while(readitem != null) { items.add(readitem); readitem = readerspringbeanname.read(); } writerspringbeanname.write(processorspringbeanname.process(items)); readerspringbeanname.close(); writerspringbeanname.close(); return repeatstatus.finished; } }
moreover, depending on usecase, there not need define spring-batch job @ all.
Comments
Post a Comment