Spring Batch ItemWriter 常见实现类及对比(含 RepositoryItemWriter)

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

关键差异说明:

  1. 性能

    • JdbcBatchItemWriter 因批量操作性能最高,适合高吞吐场景。
    • FlatFileItemWriter 受文件IO限制,性能较低。
  2. 配置复杂度

    • FlatFileItemWriter 需自定义字段映射和分隔符,配置最复杂。
    • RepositoryItemWriter 通过Spring Data简化配置,仅需注入Repository。
  3. 适用场景

    • RepositoryItemWriter 适用于Spring Data集成场景(如JPA、MongoDB),可复用已有的Repository接口。
    • JpaItemWriter 专用于JPA实体,需直接依赖JPA配置。
相关推荐
wasp5205 小时前
做了技术管理后,我发现技术和管理其实可以兼得
java·运维·网络
MarkHD5 小时前
车辆TBOX科普 第45次
java·开发语言
okseekw6 小时前
字面量的初步认识
java
倚肆6 小时前
Spring Boot CORS 配置详解:CorsConfigurationSource 全面指南
java·spring boot·后端
q***72196 小时前
Spring Boot(快速上手)
java·spring boot·后端
CoderYanger7 小时前
C.滑动窗口——1423. 可获得的最大点数
java·开发语言·算法·leetcode·1024程序员节
Swift社区7 小时前
StackOverflowError 栈溢出的原因与实战解决方案
java·spring boot·spring
字节拾光录7 小时前
手机号存储避坑指南:从20亿级数据库实践看,为什么VARCHAR才是终极答案
java·数据库·oracle
p***97617 小时前
SpringBoot(7)-Swagger
java·spring boot·后端
j***29487 小时前
springboot集成onlyoffice(部署+开发)
java·spring boot·后端