我正在使用Spring Batch和JPA处理一个批处理作业并执行更新。我正在使用默认的存储库实现。
并且我正在使用一个repository.save将修改后的对象保存在处理器中。而且,我没有在处理器或编写器中指定任何@Transactional注释。
下面是我的步骤,读取器和写入器配置:另外,我的config类是用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;
}
}
在writer中,这就是我使用的repository.save
repository.save(entity);
通过在整个作业存储库、作业、步骤等中注入一个JPATransactionManager,而不是自动连接的PlatformTransactionManager来解决这个问题。
我已经开始探索Spring Batch,并遇到了一些基本问题。
我有一个使用JPA的Spring Boot应用程序,它有一个PostgreSQL数据库。我使用的是Spring Batch。场景是我正在读取一个文件并将数据写入PostgreSQL数据库。当程序在数据库中创建Spring Batch使用的元数据表时,它与PostgreSQL一起工作。但我需要的是Spring Boot不要创建元数据表,并通过Spring Batch使用内存中基于映射的作业存储库。我
我在使用JPA时遇到了一些困难。我没有得到任何异常,但我不能保存任何东西到数据库。我从Hibernate到Jpa,在那里一切都工作得很好。下面是我的文件 Application.Properties: 存储库: 服务: 我在提交表单时得到了200的响应,但在数据库中找不到数据
它是否将其存储在缓存中?我有一个应用程序,但应用程序中没有任何地方。属性是提到的db详细信息。我可以通过邮递员存储数据和查询它。
无论如何,如果用户名已经被使用,存储库只需进行更新,因为指定的标识符不是空的。这不是我想要的行为,我需要它抛出类似重复条目异常的东西。有什么办法可以预防吗?我必须自己做吗?例如: