Spring Batch 入门示例

下面详细讲解Spring Batch入门示例的完整攻略,内容包括:

  • Spring Batch 简介
  • Spring Batch 入门示例概述
  • 示例1:批处理读取 CSV 文件并输出到控制台
  • 示例2:批处理读取数据库中的数据并写入到 XML 文件中

Spring Batch 简介

Spring Batch 是一个高效、强大、可重用的批处理框架,能够处理海量的数据量。Spring Batch 建立在 Spring 框架之上,可以轻松地集成 Spring 生态系统的其他工具和框架,如 Spring Boot、Spring Data 和 Spring Integration 等。

Spring Batch 支持以下功能:

  • 大批量处理任务
  • 失败重试机制
  • 多线程并发处理
  • 分布式处理
  • 报告和统计

Spring Batch 入门示例概述

Spring Batch 入门示例主要包括以下内容:

  • 创建 Spring Batch 项目和 Maven 依赖
  • 编写 Job、Step、Reader、Processor 和 Writer
  • 运行 Spring Batch 示例

下面,我将分别介绍示例1和示例2的具体实现。

示例1:批处理读取 CSV 文件并输出到控制台

创建 Spring Batch 项目和 Maven 依赖

首先,我们需要创建一个基于 Maven 的 Spring Batch 项目,并添加以下 Maven 依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.batch</groupId>
        <artifactId>spring-batch-core</artifactId>
        <version>4.3.3</version>
    </dependency>
    <dependency>
        <groupId>com.opencsv</groupId>
        <artifactId>opencsv</artifactId>
        <version>5.2</version>
    </dependency>
</dependencies>

编写 Job、Step、Reader、Processor 和 Writer

在 src/main/java 目录下创建 com.example.batch 包,并添加以下类:

  1. Student.java(实体类)
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Student {

    private String name;

    private String gender;

    private int age;

    private String classNo;

}
  1. CsvItemReader.java(CSV 文件读取器)
@Component
public class CsvItemReader extends FlatFileItemReader<Student> {

    public CsvItemReader() {
        setLinesToSkip(1); // 跳过表头
        setResource(new ClassPathResource("students.csv")); // CSV 文件路径
        setLineMapper(new DefaultLineMapper<Student>() {{
            setLineTokenizer(new DelimitedLineTokenizer("|") {{
                setNames(new String[]{"name", "gender", "age", "classNo"}); // CSV 文件中每一列对应实体类的属性
            }});
            setFieldSetMapper(new BeanWrapperFieldSetMapper<Student>() {{
                setTargetType(Student.class);
            }});
        }});
    }

}
  1. StudentItemProcessor.java(数据处理器)
@Component
public class StudentItemProcessor implements ItemProcessor<Student, Student> {

    @Override
    public Student process(Student student) throws Exception {
        student.setName(student.getName().toUpperCase()); // 将姓名转换为大写
        student.setAge(student.getAge() + 1); // 年龄加1
        return student;
    }

}
  1. ConsoleItemWriter.java(输出到控制台)
@Component
public class ConsoleItemWriter implements ItemWriter<Student> {

    @Override
    public void write(List<? extends Student> students) throws Exception {
        for (Student student : students) {
            System.out.println(student);
        }
    }

}
  1. BatchConfig.java(Spring Batch 配置类)
@Configuration
@EnableBatchProcessing
public class BatchConfig {

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Autowired
    private CsvItemReader csvItemReader;

    @Autowired
    private StudentItemProcessor studentItemProcessor;

    @Autowired
    private ConsoleItemWriter consoleItemWriter;

    @Bean
    public Job job() {
        return jobBuilderFactory.get("job")
                .incrementer(new RunIdIncrementer())
                .start(step())
                .build();
    }

    @Bean
    public Step step() {
        return stepBuilderFactory.get("step")
                .<Student, Student>chunk(10)
                .reader(csvItemReader)
                .processor(studentItemProcessor)
                .writer(consoleItemWriter)
                .build();
    }

}

运行 Spring Batch 示例

在 resources 目录下添加 students.csv,文件内容如下:

name|gender|age|classNo
张三|男|20|001
李四|女|22|002
王五|男|21|003
赵六|女|19|004

运行 com.example.batch.SpringBatchExampleApplication 类的 main 方法即可运行示例1。

示例2:批处理读取数据库中的数据并写入到 XML 文件中

创建 Spring Batch 项目和 Maven 依赖

首先,我们需要创建一个基于 Maven 的 Spring Batch 项目,并添加以下 Maven 依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.batch</groupId>
        <artifactId>spring-batch-core</artifactId>
        <version>4.3.3</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.batch</groupId>
        <artifactId>spring-batch-infrastructure</artifactId>
        <version>4.3.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-dbcp2</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.5</version>
    </dependency>
</dependencies>

编写 Job、Step、Reader、Processor 和 Writer

在 src/main/java 目录下创建 com.example.batch 包,并添加以下类:

  1. User.java(实体类)
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private int id;

    private String name;

    private int age;

}
  1. UserItemReader.java(数据库读取器)
@Component
public class UserItemReader extends MyBatisCursorItemReader<User> {

    public UserItemReader(SqlSessionFactory sqlSessionFactory) {
        setSqlSessionFactory(sqlSessionFactory);
        setQueryId("com.example.batch.mapper.UserMapper.selectAll"); // 调用 UserMapper 接口查询所有用户
    }

}
  1. UserItemProcessor.java(数据处理器)
@Component
public class UserItemProcessor implements ItemProcessor<User, User> {

    @Override
    public User process(User user) throws Exception {
        user.setName("Hello, " + user.getName()); // 姓名添加前缀
        user.setAge(user.getAge() + 1); // 年龄加1
        return user;
    }

}
  1. XmlItemWriter.java(写入 XML 文件)
@Component
public class XmlItemWriter extends StaxEventItemWriter<User> {

    public XmlItemWriter() throws IOException {
        setRootTagName("users");
        setResource(new FileSystemResource("users.xml")); // 输出的 XML 文件路径
        setMarshaller(getMarshaller());
    }

    private Marshaller getMarshaller() throws IOException {
        XStreamMarshaller marshaller = new XStreamMarshaller();
        marshaller.setAliases(Collections.singletonMap("user", User.class));
        marshaller.afterPropertiesSet();
        return marshaller;
    }

}
  1. BatchConfig.java(Spring Batch 配置类)
@Configuration
@EnableBatchProcessing
@MapperScan(basePackages = "com.example.batch.mapper")
public class BatchConfig {

    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Autowired
    private SqlSessionFactory sqlSessionFactory;

    @Autowired
    private UserItemReader userItemReader;

    @Autowired
    private UserItemProcessor userItemProcessor;

    @Autowired
    private XmlItemWriter xmlItemWriter;

    @Bean
    public Job job() {
        return jobBuilderFactory.get("job")
                .incrementer(new RunIdIncrementer())
                .start(step())
                .build();
    }

    @Bean
    public Step step() {
        return stepBuilderFactory.get("step")
                .<User, User>chunk(10)
                .reader(userItemReader)
                .processor(userItemProcessor)
                .writer(xmlItemWriter)
                .build();
    }

}

运行 Spring Batch 示例

创建数据库和表,并插入数据:

CREATE DATABASE springbatch
USE springbatch

CREATE TABLE user (
    id INT PRIMARY KEY,
    name VARCHAR(20),
    age INT
)

INSERT INTO user VALUES
(1, '张三', 20),
(2, '李四', 22),
(3, '王五', 21),
(4, '赵六', 19)

运行 com.example.batch.SpringBatchExampleApplication 类的 main 方法即可运行示例2。

以上就是 Spring Batch 入门示例的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Batch 入门示例 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • JAVA获取文件绝对路径的方法

    获取Java文件的绝对路径可助于在程序中读取或写入文件。下面将详细介绍Java中获取文件绝对路径的方法。 1. 通过File类的getAbsolutePath()方法获取文件路径 使用File类的getAbsolutePath()方法获取文件的绝对路径非常简单,只需要将文件对象作为参数传入即可。示例如下: File file = new File(&quot…

    Java 2023年5月20日
    00
  • spring kafka @KafkaListener详解与使用过程

    Spring Kafka @KafkaListener详解与使用过程 简介 Spring Kafka 为 Kafka 提供了 Producer 和 Consumer 的封装,提供了方便的API让我们在Spring Boot项目中使用Kafka。其中 @KafkaListener 的注解为我们编写 Kafka Consumer 提供便利。 使用步骤 使用 Sp…

    Java 2023年6月2日
    00
  • Mybatis通过数据库表自动生成实体类和xml映射文件

    “Mybatis通过数据库表自动生成实体类和xml映射文件”的完整攻略主要包括以下步骤:使用Mybatis Generator插件生成实体类和xml映射文件,配置Mybatis Generator插件,使用命令行或maven命令运行生成器。 使用Mybatis Generator插件生成实体类和xml映射文件 Mybatis Generator是一个能够根据…

    Java 2023年5月20日
    00
  • spring缓存代码详解

    Spring缓存代码详解 什么是Spring缓存? Spring缓存是一组在Spring应用程序中使用缓存的框架和模块,基于Java EE的JSR-107规范,提供了一致性且易于集成的缓存解决方案。它提供了一种方法来加速应用程序的性能,减轻系统负载,并提高应用程序的可伸缩性。 Spring缓存的工作原理 Spring缓存框架主要有两个核心概念:缓存管理器和缓…

    Java 2023年5月26日
    00
  • Struts1和struts2的区别_动力节点Java学院整理

    Struts1和Struts2的区别 什么是Struts1和Struts2 Struts1是一个基于MVC模式的Web应用框架,由Apache组织开发和维护,是早期Web开发中使用较为广泛的框架之一。 Struts2,原名WebWork,是Struts1的升级版,也是一个基于MVC模式的Web应用框架,由Apache组织维护。 Struts1和Struts2…

    Java 2023年5月20日
    00
  • 详解java自定义类

    详解Java自定义类 在Java中,我们可以使用自定义类创建对象并使用。这些对象可以有自己的属性和方法。 创建一个Java自定义类 创建一个Java自定义类需要遵循以下步骤: 用 class 关键字定义类名。类名必须以大写字母开头,遵循驼峰命名法。 在类中定义属性。属性可以是任何数据类型,包括用户自定义类型。属性定义应该在方法之前。 在类中定义方法。方法是可…

    Java 2023年5月20日
    00
  • Java生成日期时间存入Mysql数据库的实现方法

    非常感谢您对Java生成日期时间存入Mysql数据库的实现方法的关注。 下面是具体实现步骤和示例代码: 1. 准备工作 确保已经安装好了Java和Mysql,并且已经存在一个名为“test”的数据库。 导入mysql-connector-java-5.1.49-bin.jar包(版本可根据实际情况进行更换)。 2. 创建数据库表 创建一个名为“user”的表…

    Java 2023年5月20日
    00
  • Java String类的性质与比较

    针对“Java String类的性质与比较”,我准备了以下攻略: Java String类的性质 不可变性 Java中的String类是不可变的。这意味着,一旦创建了一个字符串对象,就不能更改它的内容。如果您需要修改一个字符串,必须创建一个新的对象,然后将原始对象的引用更改为指向新的字符串对象。 字符串池 Java中的字符串池是一种特殊的内存区域,它存储了所…

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部