【发布时间】:2021-03-05 04:54:42
【问题描述】:
我有一个使用 JPA 的 Spring Boot 应用程序,它有 1 个 PostgreSQL 数据库。我正在使用 Spring Batch。场景是我正在读取文件并将数据写入 PostgreSQL 数据库。当它在数据库中创建 Spring Batch 使用的元数据表时,该程序与 PostgreSQL 一起使用。但我需要的是 Spring Boot 不创建元数据表并通过 Spring Batch 使用基于内存 Map 的作业存储库。我根本不想在数据库中创建元数据表。只需执行基于内存映射的内存。我尝试了很多答案,但都没有奏效。我明白了,
MapJobRepositoryFactoryBean 已弃用
这是我的BatchConfiguration.java 课程,
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
private @Autowired JobBuilderFactory jobBuilderFactory;
private @Autowired StepBuilderFactory stepBuilderFactory;
private @Autowired UserItemReader userItemReader;
private @Autowired UserItemProcessor userItemProcessor;
private @Autowired UserItemWriter userItemWriter;
@Bean
public Step importUsersStep() {
return stepBuilderFactory.get("STEP-01")
.<User, User>chunk(10)
.reader(userItemReader)
.processor(userItemProcessor)
.writer(userItemWriter)
.build();
}
@Bean
public Job importUsersJob() {
return jobBuilderFactory.get("JOB-IMPORT")
.flow(importUsersStep())
.end()
.build();
}
}
Repository.java 类,
public interface UserRepository extends JpaRepository<User, Long> {
}
在UserItemWriter.javawrite 方法中我调用userRepository.saveAll();
那么我怎样才能使它与基于内存的 Map 一起工作,而且因为我使用 Spring Data JPA 将用户保存到数据库,所以保存也应该没有任何问题,因为当我尝试一些方法时我没有看到任何提交给 PostgreSQL,我认为即使是用户数据也提交给内存映射。所以有人可以帮助我吗?提前致谢。
【问题讨论】:
-
您使用的是哪个事务管理器?默认情况下,如果您在上下文中提供数据源,则 Spring Batch 使用
DataSourceTransactionManager。但是如果你使用 JPA,你需要将 Spring Batch 配置为使用JpaTransactionManager。
标签: spring spring-boot spring-data-jpa spring-batch