[英]Spring Batch chunk size creating duplicates
我正在運行一個Spring批處理作業,每當我將塊大小增加到大於1的任何值時, 可以說塊大小= n,它只是將“第n個”記錄重復“ n”次,而不是添加n個記錄。 下面是我的配置,請問任何指針?
@Bean
public JobLauncher jobLauncher(JobRepository jobRepository){
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(jobRepository);
return jobLauncher;
}
@Bean
public JobRepository jobRepository(DataSource dataSource, PlatformTransactionManager transactionManager) throws Exception{
JobRepositoryFactoryBean factoryBean = new JobRepositoryFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setTransactionManager(transactionManager);
factoryBean.setDatabaseType("mysql");
return factoryBean.getObject();
}
@Bean
public PlatformTransactionManager transactionManager() {
return new ResourcelessTransactionManager();
}
@Bean
public DataSource dataSource(){
DriverManagerDataSource datasource = new DriverManagerDataSource();
datasource.setDriverClassName("com.mysql.jdbc.Driver");
datasource.setUrl("jdbc:mysql://localhost:3306/mysqltest?useSSL=false");
datasource.setUsername("user");
datasource.setPassword("pwd");
return datasource;
}
@Bean
@Autowired
public Job projectMasterJob(JobBuilderFactory jobs, Step projectMasterDump) {
return jobs.get("projectMasterJob").incrementer(new RunIdIncrementer())
.flow(projectMasterDump).end().build();
}
@Bean
@Autowired
public Step projectMasterDump(StepBuilderFactory stepBuilderFactory,
FlatFileItemReader projectMasterReader, ItemWriter projectMasterDbWriter) {
return stepBuilderFactory.get("projectMasterDump")
.chunk(10).reader(projectMasterReader).writer(projectMasterDbWriter).build();
}
@Bean
@Autowired
public ItemWriter projectMasterDbWriter(DataSource dataSource){
JdbcBatchItemWriter<ProjectMasterDTO> writer = new JdbcBatchItemWriter<ProjectMasterDTO>();
writer.setSql(sql);
writer.setDataSource(dataSource);
writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
return writer;
}
@Bean
@Autowired
public FlatFileItemReader projectMasterReader(ProjectMasterDTO projectMasterDTO, DataFormatter dataFormatter){
ExcelItemReader<ProjectMasterDTO> reader = new ExcelItemReader<>();
reader.setDataFormatter(dataFormatter);
reader.setBean(projectMasterDTO);
reader.setMapperFile(new File("../instance-config/projectMapper.json"));
return reader;
}
@Bean
@Scope("prototype")
public ProjectMasterDTO projectMasterDTO(){
return new ProjectMasterDTO();
}
在上面的代碼中,我不小心將原型bean設置為單例閱讀器。 因此,只有一個bean,並且正在重復使用它,因此,當發生塊處理時,將覆蓋同一個bean,並且集合中的所有“ n”個對象都指向同一個bean。
每次在讀取器中檢索一個新鮮的bean或創建一個新實例都可以解決該問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.