Spring Batch

这篇先对Spring Batch 做个基本的介绍
现在企业业务中需要在关键任务中需要进行对大量数据的操作,这些业务操作包括自动化的,复杂的处理的大量的信息,这些操作就被称为批处理。

Spring Batch是一个轻量级的、全面的批处理框架,旨在使开发健壮的批处理应用程序对企业系统的日常操作至关重要。

Spring Batch提供了大量可重用的组件,包括日志、追踪、事务、任务作业统计、任务重启、跳过、重复、资源管理。对于大数据量和高性能的批处理任务,Spring Batch同样提供了高级功能和特性来支持,比如分区功能、远程功能。总之,通过Spring Batch 能够支持简单的、复杂的和大数据量的批处理作业。

Spring Batch 3.0 主要新特性

  1. JSR-352 Support
  2. Upgrade to Support Spring 4 and Java 8
  3. Promote Spring Batch Integration to Spring Batch
  4. JobScope Support
  5. SQLite Support

JavaConfig 配置是在 2.2版本就已经支持了的。

SpringBatch 架构

Spring Batch核心架构分为三层:应用层、核心层、基础架构层。

spring batch 架构

应用层包含所有的批处理作业,通过Spring框架管理程序员自定义的代码。核心层包含Spring Batch启动和控制所需要的核心类,如:JobLauncher、Job和step等。应用层和核心层建立在基础构架层之上,基础构架层提供通用的读(ItemReader)、写(ItemWriter)和服务处理(如:RetryTemplate:重试模板;RepeatTemplate:重复模板,可以被应用层和核心层使用)。Spring Batch的三层体系架构使得Spring Batch框架在不同的层级进行扩展,避免不同层级间的影响。

开箱即用的组件

读:支持文本文件读、XML文件读、数据库读,JMS队列读。
写:支持写文本文件、XML文件、数据库、JMS队列。
该组件还提供作业仓库、作业调度器等基础设施,大大简化了批处理应用开发的复杂度。
可查看ItemReader 和 ItemReader 这两个接口的实现类等。

还有许多的特性等用到再详细说明。

这里写图片描述

  • Job : 作业本身, 多个或一个Step组合一个Job
  • Step: 作业步Job 执行的一个环节,每个step都有 Reader Proccessor Writer的操作
  • ItemReader: 读取信息的操作,可以从数据库或者文件中读取数据交给processor处理
  • ItemProcessor:处理数据的操作,接受读操作传递的数据进行处理再传递给写操作
  • ItemWriter:写操作,将处理过的信息写入数据库或者文件中等
  • JobLauncher:用来启动一个job
  • JobRepository:存储spring batch的元数据

上面这张图很重要,基本上我们需要操作的都包含在了上面这张图上面。

Job 看起来是 Steps 的简单的容易,其中可以包含多个Step,在Job中有很多需要知道的配置,例如如何让Job 启动,如何在它运行的时候存储它的元数据。

Spring 2.2 支持 Java Config 来配置Batch
新增了 @EnableBatchProcessing 注解 和 两个工厂类 分别是JobBuilderFactory 和StepBuilderFactory
通过 @EnableBatchProcessing 注解(这是一个类注解),StepScope 的实例被创建,并且使下列的bean都可以被自动注入

  • JobRepository - bean name “jobRepository”
  • JobLauncher - bean name “jobLauncher”
  • JobRegistry - bean name “jobRegistry”
  • PlatformTransactionManager - bean name “transactionManager”
  • JobBuilderFactory - bean name “jobBuilders”
  • StepBuilderFactory - bean name “stepBuilders”

下面是一个简单的示例

@Configuration   //声明为配置类
@EnableBatchProcessing 
//在配置类中激活spring batch 的特性 并且提供基本的配置来建立批处理任务
@Import(DataSourceConfiguration.class)
//导入数据源配置
public class AppConfig {

    //以下两个引用因为类上配置了@EnableBatchProcessing所以可以自动注入
    @Autowired
    private JobBuilderFactory jobs;

    @Autowired
    private StepBuilderFactory steps;

    //@Bean 是Java Config(一个Spring 的子项目)的注解 相当于xml配置的<bean  />标签 
    @Bean
    public Job job(@Qualifier("step1") Step step1, @Qualifier("step2") Step step2) {
        //从job共享类中得到一个名字为"my job"的任务,开启任务步Step1
        return jobs.get("myJob").start(step1).next(step2).build();
    }

    //任务步1的配置 step配置会在后面提到
    @Bean
    protected Step step1(ItemReader<Person> reader, ItemProcessor<Person, Person> processor, ItemWriter<Person> writer) {
        return steps.get("step1")
            .<Person, Person> chunk(10)
            .reader(reader)
            .processor(processor)
            .writer(writer)
            .build();
    }


    //Tasklet 是Step中具体执行逻辑的操作,可以设置重复执行, 同步/异步等。 
    @Bean
    protected Step step2(Tasklet tasklet) {
        return steps.get("step2")
            .tasklet(tasklet)
            .build();
    }
}

示例来自于 Spring Batch doc
http://docs.spring.io/spring-batch/trunk/reference/html/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值