¿Cuál es la función de JobBuilderFactory.get (job) .incrementer (RunIdIncrementer)?

Estoy desarrollando un proyecto Spring-Batch usando Spring-Boot y todo va muy bien. He hecho algunos ejemplos de lotes de primavera (incluidos algunos de spring.io), pero no estoy seguro de qué hacen algunas de las cosas, y "simplemente funciona" no me sacia.

Mis implementos de clase principal de arranque de primaveraCommandLineRunner y para este trabajo en particular, la configuración inicial parecía

@Bean
public Job myJob(JobExecutionListenerSupport listener) {
    return myJobBuilderFactory.get(JOB)
            .listener(listener)
            .start(myStep())
            .build();
}

Que causó

java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:809) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:790) ~[spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
    at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:777) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [spring-boot-1.3.2.RELEASE.jar:1.3.2.RELEASE]
    at org.bjc.providermodel.maintenance.MaintenanceApplication.main(MaintenanceApplication.java:20) [classes/:?]
Caused by: org.springframework.batch.core.repository.JobExecutionAlreadyRunningException: A job execution for this job is already running: JobInstance: id=99, version=0, Job=[myJob]

¿Por qué cambiar el bean anterior a

@Bean
public Job myJob(JobExecutionListenerSupport listener) {
    return myJobBuilderFactory.get(JOB)
            .incrementer(new RunIdIncrementer())
            .listener(listener)
            .start(myStep())
            .build();
}

¿Hacer que todo salga bien? Intenté leer sobre el documento paraRunIdIncrementer y también leer un pocoaquí. Por lo que puedo decir, necesita este incrementador para realizar un seguimiento de un conjunto particular de trabajos que se ejecutan para hacer "cosas", pero no estoy seguro de qué cosas son exactamente. La abstracción Spring-Boot me dificulta saber qué está pasando aquí