我正在使用Spring Batch和JPA来处理批处理作业并执行更新。我正在使用默认的Repository实现。
我正在使用repository.save将修改后的对象保存在处理器中。 另外,我没有在处理器或编写器中指定任何@Transactional Annotation。
我始终没有看到任何例外。选择很好。
是否有任何类似“setAutoCommit(true)”的设置我应该用于JPA以保存数据库中的数据。
这是我的步骤,读者和作家配置: 此外,我的配置类使用EnableBatchProcessing
进行注释@EnableBatchProcessing
public class UpgradeBatchConfiguration extends DefaultBatchConfigurer{
@Autowired
private PlatformTransactionManager transactionManager;
@Override
protected JobRepository createJobRepository() throws Exception {
JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean();
factory.setDataSource(getdataSource());
factory.setTransactionManager(transactionManager);
factory.setTablePrefix("CFTES_OWNER.BATCH_");
factory.afterPropertiesSet();
return factory.getObject();
}
@Bean(name = "updateFilenetJobStep")
public Step jobStep(StepBuilderFactory stepBuilderFactory,
@Qualifier("updateFileNetReader") RepositoryItemReader reader,
@Qualifier("updateFileNetWriter") ItemWriter writer,
@Qualifier("updateFileNetProcessor") ItemProcessor processor) {
return stepBuilderFactory.get("jobStep").allowStartIfComplete(true).chunk(1).reader(reader).processor(processor)
.writer(writer).transactionManager(transactionManager).build();
}
@Bean(name = "updateFileNetWriter")
public ItemWriter getItemWriter() {
return new BatchItemWriter();
}
@Bean(name = "updateFileNetReader")
public RepositoryItemReader<Page<TermsAndConditionsErrorEntity>> getItemReader(
TermsAndConditionsErrorRepository repository) {
RepositoryItemReader<Page<TermsAndConditionsErrorEntity>> reader = new RepositoryItemReader<Page<TermsAndConditionsErrorEntity>>();
reader.setRepository(repository);
reader.setMethodName("findAll");
HashMap<String, Direction> map = new HashMap<String, Direction>();
map.put("transactionId", Direction.ASC);
reader.setSort(map);
return reader;
}
}
在作者中,这就是我使用的Repository.save
repository.save(entity);
答案 0 :(得分:0)
我能够通过注入整个JPATransactionManager(作业存储库,作业,步骤等)而不是Autowired PlatformTransactionManager来解决这个问题。