i'm trying me head around spring boot's auto wiring spring batch. in example in spring docs, there number of parameters being passed in constructor beans.
the example works, if try create job using identical configuration (naming importuserjob2), non-unique bean exception - error reports there 2 step beans.
@bean public job importuserjob(jobbuilderfactory jobs, step s1, jobexecutionlistener listener) { return jobs.get("importuserjob") .incrementer(new runidincrementer()) .listener(listener) .flow(s1) .end() .build(); } what constructor here mean when used parameters (i can't see these parameters supplied) , these beans being created? how create 2 jobs?
edit: here 2 jobs, 2 steps , exception get.
@bean public job hellojob(jobbuilderfactory jobs, step s1, jobexecutionlistener listener) { return jobs.get("hellojob") .incrementer(new runidincrementer()) .listener(listener) .flow(s1) .end() .build(); } @bean public step step1(stepbuilderfactory stepbuilderfactory) { return stepbuilderfactory.get("step1") .tasklet(hellotasklet()) .build(); } @bean public job otherjob(jobbuilderfactory jobs, step s1, jobexecutionlistener listener) { return jobs.get("otherjob") .incrementer(new runidincrementer()) .listener(listener) .flow(s1) .end() .build(); } @bean public step step2(stepbuilderfactory stepbuilderfactory, itemreader<myreaditem> reader, itemwriter< myreaditem > writer) { return stepbuilderfactory.get("step2") .< myreaditem, myreaditem > chunk(10) .reader(reader) .writer(writer) .build(); } and exception:
nested exception org.springframework.beans.factory.nouniquebeandefinitionexception: no qualifying bean of type [org.springframework.batch.core.step] defined: expected single matching bean found 2: step1,step2 what creates step s1? right in thinking spring looks bean correct type (step), there 2 found? need qualify steps when they're created ensure correct 1 injected??
in both job definitions methods, using "step s1" parameter. since "s1" not name of bean, spring try autowire type. however, find 2 steps ("step1" , "step2") in context. guess, that's reason exception. either change names in parameter, or call directly method in definitions:
@bean public job otherjob(jobbuilderfactory jobs, jobexecutionlistener listener) { return jobs.get("otherjob") .incrementer(new runidincrementer()) .listener(listener) .flow(step2()) .end() .build(); } spring takes care, not calls step2 method, instead provides real spring-bean.
Comments
Post a Comment