Spring Batch Job Running en bucle infinito
Estoy trabajando en un simple trabajo de Spring Batch. Cuando inicio el trabajo, se ejecuta en bucle infinito. No para De acuerdo con el tiempo de mi planificador, debería ejecutarse cada 10 segundos. Pero cuando comienza el trabajo, no se detiene. Simplemente sigue imprimiendo sysouts del lector, procesador y escritor respectivamente. Estoy creando trabajo con lector, procesador y escritor. Y estoy haciendo toda la configuración por anotaciones. No por xml.
Aquí está la configuración por lotes
@Configuration
@EnableBatchProcessing
@EnableScheduling
public class BatchJobConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private SimpleJobLauncher jobLauncher;
@Scheduled(cron="*/10 * * * * *")
public void perform() throws Exception
{
Job job = job(step1());
JobParameters jobParameters = new JobParameters();
jobLauncher.run(job, jobParameters);
}
@Bean
public Step step1()
{
return stepBuilderFactory.get("step1").<Person, Person> chunk(1)
.reader(reader()).processor(processor()).writer(writer())
.build();
}
@Bean
public Job job(Step step1) throws Exception
{
return jobBuilderFactory.get("job")
.incrementer(new RunIdIncrementer()).flow(step1())
.end().build();
}
@Bean
public DataSource dataSource()
{
EmbeddedDatabaseBuilder embeddedDatabaseBuilder = new EmbeddedDatabaseBuilder();
return embeddedDatabaseBuilder.addScript("classpath:org/springframework/batch/core/schema-drop-hsqldb.sql")
.addScript("classpath:org/springframework/batch/core/schema-hsqldb.sql")
.setType(EmbeddedDatabaseType.HSQL)
.build();
}
@Bean
public PersonReader reader() {
return new PersonReader();
}
@Bean
public PersonWriter writer() {
return new PersonWriter();
}
@Bean
public PersonProcessor processor() {
return new PersonProcessor();
}
@Bean
public MapJobRepositoryFactoryBean mapJobRepositoryFactory(ResourcelessTransactionManager txManager) throws Exception {
MapJobRepositoryFactoryBean factory = new MapJobRepositoryFactoryBean(txManager);
factory.afterPropertiesSet();
return factory;
}
@Bean
public JobRepository jobRepository(MapJobRepositoryFactoryBean factory) throws Exception {
return factory.getObject();
}
@Bean
public SimpleJobLauncher jobLauncher(JobRepository jobRepository) {
SimpleJobLauncher launcher = new SimpleJobLauncher();
launcher.setJobRepository(jobRepository);
return launcher;
}
@Bean
public ResourcelessTransactionManager transactionManager() {
return new ResourcelessTransactionManager();
}
}
PersonReader.java
public class PersonReader implements ItemReader<Person> {
@Override
public Person read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
Person person = new Person();
System.out.println("In PersonReader");
return person;
}
}
PersonWriter.java
public class PersonWriter implements ItemWriter<Person> {
@Override
public void write(List<? extends Person> arg0) throws Exception {
System.out.println("IN PersonWriter");
}
}
PersonProcessor.java
public class PersonProcessor implements ItemProcessor<Person, Person> {
@Override
public Person process(Person arg0) throws Exception {
System.out.println("In PersonProcessor");
return arg0;
}
}