Cómo Spring Boot ejecuta trabajos por lotes

Seguíesta muestra para Spring Batch con arranque.

Cuando ejecuta el método principal, el trabajo se ejecuta. De esta manera no puedo entender cómo se puede controlar la ejecución del trabajo. Por ejemplo, cómo programa un trabajo, cómo obtiene acceso a la ejecución del trabajo o cómo establece los parámetros del trabajo.

Traté de registrar mi propio JobLauncher

@Bean
public JobLauncher jobLauncher(JobRepository jobRepo){
    SimpleJobLauncher simpleJobLauncher = new SimpleJobLauncher();
    simpleJobLauncher.setJobRepository(jobRepo);
    return simpleJobLauncher;
}

pero cuando trato de usarlo en el método principal:

public static void main(String[] args) {
    ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args);    
    JobLauncher jobLauncher = ctx.getBean(JobLauncher.class);
    //try catch removed for readability
    jobLauncher.run(ctx.getBean(Job.class), new JobParameters());   
}

El trabajo se ejecuta nuevamente cuando se carga el contexto y obtuveJobInstanceAlreadyCompleteException cuando trato de ejecutarlo manualmente. ¿Hay alguna manera de evitar la ejecución automática del trabajo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta