Spring Batch ItemWriter 常见实现类及对比(含 RepositoryItemWriter
)
1. JdbcBatchItemWriter
适用场景 :批量写入关系型数据库(如MySQL、PostgreSQL)。
数据类型 :POJO/实体对象。
示例代码:
java
@Bean
public JdbcBatchItemWriter<MyEntity> jdbcWriter(DataSource dataSource) {
JdbcBatchItemWriter<MyEntity> writer = new JdbcBatchItemWriter<>();
writer.setDataSource(dataSource);
writer.setSql("INSERT INTO my_table (id, name) VALUES (:id, :name)");
writer.setItemSqlParameterSourceProvider(
new BeanPropertyItemSqlParameterSourceProvider<>()
);
writer.setBatchSize(100); // 批量提交大小
return writer;
}
2. FlatFileItemWriter
适用场景 :写入文本文件(如CSV、TXT)。
数据类型 :文本数据。
示例代码:
java
@Bean
public FlatFileItemWriter<MyEntity> fileWriter(Resource resource) {
FlatFileItemWriter<MyEntity> writer = new FlatFileItemWriter<>();
writer.setResource(resource); // 文件路径(如"classpath:output.csv")
// 配置行聚合器(分隔符、字段映射)
writer.setLineAggregator(new DelimitedLineAggregator<>() {{
setDelimiter(",");
setFieldExtractor(new BeanWrapperFieldExtractor<>() {{
setNames(new String[] {"id", "name"});
}});
}});
return writer;
}
3. MongoItemWriter
适用场景 :写入MongoDB文档。
数据类型 :MongoDB文档对象。
示例代码:
java
@Bean
public MongoItemWriter<MyDocument> mongoWriter(MongoOperations operations) {
MongoItemWriter<MyDocument> writer = new MongoItemWriter<>();
writer.setTemplate(operations); // MongoDB操作模板
writer.setCollection("my_collection"); // 集合名称
return writer;
}
4. JpaItemWriter
适用场景 :通过JPA保存实体到数据库。
数据类型 :JPA实体对象。
示例代码:
java
@Bean
public JpaItemWriter<MyEntity> jpaWriter(EntityManagerFactory emf) {
JpaItemWriter<MyEntity> writer = new JpaItemWriter<>();
writer.setEntityManagerFactory(emf); // JPA实体管理工厂
return writer;
}
5. RepositoryItemWriter
适用场景 :通过Spring Data Repository批量保存数据(如Spring Data JPA/Mongo)。
数据类型 :支持Spring Data支持的实体对象。
示例代码:
java
@Bean
public RepositoryItemWriter<MyEntity> repositoryWriter(CrudRepository<MyEntity, Long> repo) {
RepositoryItemWriter<MyEntity> writer = new RepositoryItemWriter<>();
writer.setRepository(repo); // Spring Data Repository接口实现
writer.setMethodName("save"); // 调用Repository的save方法
return writer;
}
实现类对比表格
实现类 | 适用场景 | 数据类型 | 配置复杂度 | 性能 | 依赖库 |
---|---|---|---|---|---|
JdbcBatchItemWriter |
关系型数据库批量写入 | POJO/实体 | 中 | 高(批量操作) | spring-jdbc |
FlatFileItemWriter |
文件(CSV/TXT)输出 | 文本数据 | 高(需配置格式) | 中 | spring-batch-infrastructure |
MongoItemWriter |
MongoDB文档写入 | MongoDB对象 | 低 | 中 | spring-data-mongodb |
JpaItemWriter |
JPA实体保存到数据库 | JPA实体 | 低 | 中 | spring-orm |
RepositoryItemWriter |
Spring Data Repository保存 | Spring Data实体 | 低 | 中 | spring-batch-infrastructure spring-data-commons |
关键差异说明:
-
性能:
JdbcBatchItemWriter
因批量操作性能最高,适合高吞吐场景。FlatFileItemWriter
受文件IO限制,性能较低。
-
配置复杂度:
FlatFileItemWriter
需自定义字段映射和分隔符,配置最复杂。RepositoryItemWriter
通过Spring Data简化配置,仅需注入Repository。
-
适用场景:
RepositoryItemWriter
适用于Spring Data集成场景(如JPA、MongoDB),可复用已有的Repository接口。JpaItemWriter
专用于JPA实体,需直接依赖JPA配置。