I've also faced with this problem.
We are writing jobs configurator, so I prefer to set a lot of parameters by myself.
You can define StepFactoryBean
Code:
<bean id="factoryBean" class="org.springframework.batch.core.step.item.FaultTolerantStepFactoryBean">
<property name="transactionManager" ref="transactionManager" />
<property name="jobRepository" ref="jobRepository" />
<property name="startLimit" value="100" />
<property name="commitInterval" value="10" />
<property name="skipLimit" value="400" />
<property name="taskExecutor" ref="asyncTaskExecutor" />
<property name="listeners">
<list>
<ref bean="skipListener" />
<ref bean="stepExecutionListener" />
</list>
</property>
<property name="skippableExceptionClasses">
<map>
<entry key-ref="runtimeException" value="true" />
<!-- <entry key-ref="pathNotFoundException" value="true" /> -->
<!-- <entry key-ref="documentGenerationException" value="true" /> -->
</map>
</property>
</bean>
then inject it... and all others beans what you need
Code:
......................................................
......................................................
factoryBean.setSkipLimit(jobDefinition.getSkipLimit());
factoryBean.setCommitInterval(jobDefinition.getCommitInterval());
factoryBean.setThrottleLimit(jobDefinition.getThrottleLimit());
TaskletStep taskletStep = (TaskletStep) factoryBean.getObject();
taskletStep.setName("Tasklet Step");
job.addStep(taskletStep);
......................................................
......................................................
jobLauncher.run(job, jobParametersBuilder.toJobParameters());
It's quite flexible approach. For instance you can also set taskExecutor programmatically and manipulate maxPoolSize, queueCapacity etc on-a-fly
IMHO, of course