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

Popular posts from this blog

mysql - Dreamhost PyCharm Django Python 3 Launching a Site -

java - Sending SMS with SMSLib and Web Services -

java - How to resolve The method toString() in the type Object is not applicable for the arguments (InputStream) -