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配置。
相关推荐
裕晟资质规划1 小时前
三类涉密资质延续时限差异分析:军工60日与集成印制3个月的边界
java·服务器·前端·网络·安全
念念清晰1 小时前
000-OpenJDK17 源码构建:MacOS环境(M芯片)
java·后端
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 百度人脸识别入门案例
java·百度·交友
来福猿1 小时前
SpringCloud Config 源码分析:配置拉取、刷新与多环境管理
后端·spring·spring cloud
wuminyu2 小时前
JMM学习总结:深入理解happens-before关系
java·linux·c语言·jvm·c++
电商API_180079052472 小时前
反向海淘多币种结算:汇率该在哪个时点被冻结
java·开发语言·数据库·跨境电商·1688 api
开开心心就好3 小时前
多份文档怎么批量打印?支持多种格式
java·服务器·开发语言·pdf·ocr·散列表·启发式算法
Pniubi3 小时前
模拟一个充值送token怎么保证幂等?一致性?原子性?
java
企业数字化笔记3 小时前
多租户配额怎么控制?用量口径、并发预留与超额处理的实现方法
java·数据库·spring boot
巴勒个啦4 小时前
Prompt Engineering 实战:5 个让 AI 生成生产级业务代码的工程模式
java·前端