Eu tenho uma pequena amostra do aplicativo Spring Batch que quando começou pela primeira vez irá funcionar bem, mas sempre que eu fechar a aplicação para baixo e reiniciar o frasco Eu sempre obter este erro:
Caused by: org.springframework.dao.DuplicateKeyException: PreparedStatementCallback; SQL [INSERT IGNORE into BATCH_JOB_INSTANCE(JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION) values (?, ?, ?, ?)]; Duplicate entry '1' for key 1; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 1
Eu não tenho certeza se eu tenho o trabalho incrementador errado configuração. Mas como eu disse eu posso iniciá-lo e, em seguida, usar a URL do serviço web,/jobLauncher.html , para invocar o processo em lote qualquer número de vezes apenas multa. É só depois de eu desligar o aplicativo e reiniciá-lo que eu recebo este erro. Ele quer usar id 1 para a tabela de execução do trabalho, mas id 1 já está lá das execuções anteriores.
classe principal
@EnableAutoConfiguration
@ComponentScan
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, new String[]{ date= + System.currentTimeMillis() });
}
}
classe webservice
@Controller
public class JobLauncherController {
@Autowired
JobLauncher jobLauncher;
@Autowired
Job job;
@RequestMapping(/jobLauncher.html)
@ResponseBody
public String handle() throws Exception{
jobLauncher.run(job, new JobParametersBuilder().addString(date, System.currentTimeMillis() + ).toJobParameters());
return Started the batch...;
}
}
classe Spring Batch
@Configuration
@EnableBatchProcessing
public class SampleBatchApplication {
@Autowired
private JobBuilderFactory jobs;
@Autowired
private StepBuilderFactory steps;
@Bean
protected Tasklet tasklet() {
return new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution,
ChunkContext context) {
return RepeatStatus.FINISHED;
}
};
}
@Bean
public Job job() throws Exception {
return this.jobs.get(job)
.incrementer(new RunIdIncrementer())
.flow(this.step1())
.end()
.build();
}
@Bean
protected Step step1() throws Exception {
return this.steps.get(step1).tasklet(this.tasklet()).build();
}
@Bean
public DataSource dataSource() {
BasicDataSource ds = new BasicDataSource();
try {
ds.setDriverClassName(com.mysql.jdbc.Driver);
ds.setUsername(test);
ds.setPassword(test);
ds.setUrl(jdbc:mysql://127.0.0.1:3306/spring-batch);
} catch (Exception e) {
e.printStackTrace();
}
return ds;
}
}













