Spring Batch Jpa存储库保存不提交数据

时间:2016-09-19 21:34:10

标签: spring spring-batch spring-data-jpa

我正在使用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);

1 个答案:

答案 0 :(得分:0)

我能够通过注入整个JPATransactionManager(作业存储库,作业,步骤等)而不是Autowired PlatformTransactionManager来解决这个问题。