Qual é a função do JobBuilderFactory.get (job) .incrementer (RunIdIncrementer)?

Estou desenvolvendo um projeto Spring-Batch usando Spring-Boot e tudo está indo bem. Eu fiz alguns exemplos de lotes de primavera (incluindo alguns de spring.io), mas não sei o que algumas das coisas fazem, e "isso simplesmente funciona" não me sacia.

Minha classe principal de inicialização de primavera implementaCommandLineRunner e para este trabalho em particular, a configuração inicial parecia

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

O que causou

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 que alterar o bean acima para

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

Faça tudo correr bem? Tentei ler o documento paraRunIdIncrementer e também ler um poucoaqui. Pelo que posso dizer, ele precisa desse incrementador para acompanhar um conjunto específico de tarefas que estão sendo executadas para fazer "coisas", mas sem ter certeza do que são exatamente. A abstração do Spring-Boot está dificultando para mim saber o que está acontecendo aqui