Spring batch系列文章(一)——介绍和入门

Spring batch系列文章(一)——介绍和入门


Spring Batch 简介

关于 spring batch 的简介,官方说法,网上随便一搜就有,这里就不再赘述了,大概就是批量处理数据的一种轻量级框架,通常不需要人工参与就能够自动高效的进行复杂的数据处理和分析。如:定期对大量数据进行业务数据处理,或者从内部系统或者外部系统获得的数据进行处理后集成到其他系统中,这样的工作都叫“批处理”。

批处理的特点

典型的批处理应用一般都有这样的特点:

  • 自动执行,根据系统设定的步骤自动执行。
  • 数据量大,通常是百万千万或者亿级。
  • 定时执行,每天、每周、定时的执行。

整个流程一共分为三个阶段:

  1. 读数据,数据可以来自文件、数据库、消息队列等;
  2. 处理数据,处理读取的数据,并生成处理结果。
  3. 写数据,把处理后的数据写入文件、数据库、消息队列等。

spring batch 的好基友

spring batch 只是一个批处理的应用框架,没有调度功能,一般需要和调度框架进行合作来构建完成批处理任务。它只关注批处理任务相关的问题,如事务、并发、监控、执行等,并不提供相应的调度功能。如果需要使用调度框架,可以和很多优秀的调度框架一起使用,如 Quartz 等。


spring batch 集成 spring boot 的入门程序

maven 配置

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.5.RELEASE</version>
</parent>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.batch</groupId>
    <artifactId>spring-batch-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

application 启动类

配置完成后,添加一个 springboot 启动类,我创建了一个 pers.buyusan.batch 包,在包下创建了 SpringBatchApplication 类:

@SpringBootApplication
public class SpringBatchApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBatchApplication.class, args);
    }
}

配置数据源,我习惯 yaml 文件:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/springbatch?characterEncoding=utf8&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root
    schema: classpath:/org/springframework/batch/core/schema-mysql.sql
  batch:
    initialize-schema: always

JobConfig

spring batch 是通过 job,也就是任务,作为任务执行的容器,所以要先生成 job 对象,通过框架提供的 JobBuildFactory 类,有了 job 后,每个任务都要分步骤执行,也就是 step 对象,step 对象通过 StepBuildFactory 类去创建。step 的执行可以通过两种方式:chunk 和 tasklet。我先用 tasklet 方式进行一个简单 helloworld 的输出任务编写。

创建 config 包,在包中创建一个 JobConfiguration 类。

@Configuration
@EnableBatchProcessing
public class JobConfiguration {
    //注入创建任务对象的对象
    @Autowired
    private JobBuilderFactory jobBuilderFactory;
    //任务的执行由 step 决定
    //注入创建 step 对象的对象
    @Autowired
    private StepBuilderFactory stepBuilderFactory;
    //创建任务对象
    @Bean
    public Job helloWorldJob(){
        return jobBuilderFactory.get("helloWorldJob")
                .start(step1())
                .build();
    }
    @Bean
    public Step step1() {
        return stepBuilderFactory.get("helloWorldStep")
                .tasklet((contribution, chunkContext) -> {
                    System.out.println("hello world");
                    return RepeatStatus.FINISHED;
                })
                .build();
    }
}

现在为止,我的目录结构如下:
在这里插入图片描述
运行启动类后,可以看到程序顺利执行:
在这里插入图片描述
再去数据库看一下表,spring batch已经自动创建了好几张表,如图:
在这里插入图片描述
打开batch_job_execution可以看到

在这里插入图片描述
打开batch_job_instance可以看到
在这里插入图片描述
打开batch_step_execution可以看到
在这里插入图片描述
刚刚执行的记录已经都在里面生成啦。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值