Spring-Batch学习总结(1)——重要概念,环境搭建,名词解释,第一个项目及异常处理

Spring-batch框架学习总结(1)
一.初识Spring-batch框架:
1.核心名词解释:
Job:是Spring-batch框架的核心概念,它包含了批处理的所有操作
Step:每一个Job由一个或多个Step组成,每个Step中涉及到itemReader,itemProcessor,ItemWriter,这三个接口顾名思义,一个负责数据源,一个负责业务逻辑,一个负责处理后的数据输出;
JobRepository:定义Job时,需要指定一个JobRepository,用来存储Job在运行过程中的状态信息,对于存储状态信息的原因为:如果Job运行失败了,Spring支持从失败的地方重新运行,而不是从头开始;
JobLauncher:很好理解launchuer是用来执行Job的,如果不设置,系统也会默认给Job配置默认的Launcher;
2.图解各名词关系:

3.Spring-Batch架构组件分类:
Application(应用层):包含开发者应用Spring-batch编写的所有批处理作业和自定义代码;
Batch Core(核心层):包含加载和控制批处理作业所必需的核心类,它包含了Job,Step,JobLauncher的实现;
Infrastructure(基础架构层):基础架构层包含了Reader(ItemReader),Writer(ItemWriter),Services可以被应用层和核心层使用;

4.各层关系图解:


二.创建一个简单的Spring-batch项目
1.创建spring-batch工程,将其导IDE中

2.创建一个简单的Job
(1)创建一个Configuration包;

(2)创建一个Configuration类:需加上@Configuration;@EnableBatchProcessing;

(3)注入使用的依赖@Autowired:JobBuilderFactory;StepbuilderFactory;

(4)类展示:

package com.dhcc.batch.batchDemo.config;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

@Configuration
@EnableBatchProcessing
public class JobConfiguration {
    @Autowired
    private JobBuilderFactory jobBuilderFactory;
    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Primary
    @Bean
    public Job helloWord() {
        return jobBuilderFactory.get("helloWordJob").start(step1()).build();

    }

    JobLauncher
    @Bean
    public Step step1() {
        return stepBuilderFactory.get("step1").tasklet(new Tasklet() {

            @Override
            public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
                System.out.println("Hello Spring Batch....");
                return RepeatStatus.FINISHED;
            }
        }).build();

    }
}

(5)打开BatchDemoApplication启动服务器异常信息:

解决办法:分析spring-batch运行时需要数据库支持,而我们没有连接任何的数据库,故我们以spring中的内存数据库H2为例,进行配置,如下:

<!-- 内存数据库h2 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>

添加完成,我们继续启动项目,查看控制台:

项目运行成功,我们看见控制台输出信息,我们成功创建了Job以及step,并打印出hello word Batch...
三.开发环境的搭建
前提:在MySQL数据库中创建我们需要的数据库,我创建的数据库名为springbatch;

1.我们以MySQL数据库为例,首先先加入Jdbc以及mysql数据库的一些依赖(记得注释掉H2内存数据库依赖);

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

2.在application.properties下添加配置信息;

spring.datasource.url=jdbc:mysql://localhost:3306/springbatch?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&useSSL=false
spring.datasource.username=root
spring.datasource.password=qitao1996
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.schema=classpath:/org/springframework/batch/core/schema-mysql.sql

spring.batch.initialize-schema=always

配置完成后,我们再次启动我们的项目,观察控制台:

可以看见项目运行成功,现在我们在进入数据库中观察我们的springbatch数据库结果我们发现运行之前没有任何表的数据库现在出现了如下表:

四.总结SpringBatch中的重要概念(经过二,三的学习对一进一步认识)
1.Job:是一个接口,接口中定义了一个作业是怎么样执行的;JobInstance是为Job的一次运行,我们可以将其理解为Job的一个实例;JobExceution是JobInstace的每一次执行,他会记录状态,根据状态尝试执行,未执行成功,下一次继续执行
2.JobInstance:是job的一次执行,一个JobInstance可重复执行,如果上一次执行失败下次执行的时候还会重新执行上次失败的job,每一次执行就是一个JobExceution
3.JobParameters:作为参数可以用来启动Job,并且可以用来标识不同的Job,运行时提供给JobInstance,jonExceution根据状态和参数决定下一次是否继续执行
4.JobExceution:每一次尝试执行一个Job的时候,我们就可以将其称为一个JobExceution,这个执行的结果可以为成功,也可以为失败,例如一个JobInstance执行失败了,下一次执行他传入的参数是上次执行的时间,他将会继续执行,这样始终执行的是一个JobInstance,而产生了两个JobExceution
图例:

5.Step:主要分为两块
(1)Tasklet:接口他其中包含了一个唯一的方法execute();
(2)Chunk-based:一个一个处理Step中如下模块:
·itemReader:数据输入input:对于一个Step而言,每次读取一个条目;
·itemProcessor:数据处理processing
·ItemWriter:数据输出output:对于一个Step而言,每次根据设定输出批量一个条目;
6.StepExecution:一个Step的每一次尝试执行,都会创建一个StepExection,在一个Step实际开始执行的时候创建(如下图解)

7.ExecutionContext:执行上下文,代表的是一个key-value键值对的集合,可以被Spring框架进行在持久化管理,能够是开发人员存储持久化状态,每一个JobExecution以及每一个StepExecution的执行都会对应一个执行上下文(ExecutionContext);对于StepExecution在每一次提交点时就会保存一下执行上下文,而对于Job是在每一个StepExecution执行之间进行保存,例如,我们从Step1换到Step2是就会保存;
8.JobRepository:此条不再重复解释
9.JobLauncher:接口,用于启动和加载Job,根据传入的参数进行启动,返回Job一次执行的情况,如下接口方法;

public JobExecution run(Job job, JobParameters jobParameters) throws JobExecutionAlreadyRunningException,
            JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException;

下面附完整pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.dhcc.batch</groupId>
    <artifactId>batchDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>batchDemo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <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>

        <!-- 内存数据库h2
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        -->

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

原文地址:http://blog.51cto.com/13501268/2176808

时间: 2024-10-05 08:30:36

Spring-Batch学习总结(1)——重要概念,环境搭建,名词解释,第一个项目及异常处理的相关文章

django基础,环境搭建,开始第一个项目

环境准备:Ubuntu.python 3.5+.pycharm 2017.1.5+.MySQL.推荐,提供的封装好了的 Ubuntu python虚拟环境的重要性:什么是python虚拟环境,通过工具,将系统上的python复制了一份.-为什么要有        1.不会污染系统环境        2.不同的项目环境的隔离    -创建虚拟环境(以我们提供的ubuntu为例)        1.查看当前有哪些虚拟环境:workon        2.创建虚拟环境:mkvirtualenv -p

Spring Batch学习笔记二

此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch的架构 一个Batch Job是指一系列有序的Step的集合,它们作为预定义流程的一部分而被执行: Step代表一个自定义的工作单元,它是Job的主要构件块:每一个Step由三部分组成:ItemReader.ItemProcessor.ItemWriter:这三个部分将执行在每一条被处理的记录上,ItemReader读取每一条记录,然后传递给ItemProcessor处理,最后交给ItemWriter做持久化:It

Spring Batch学习笔记三:JobRepository

此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch Job在运行时有很多元数据,这些元数据一般会被保存在内存或者数据库中,由于Spring Batch在默认配置是使用HSQLDB,也就是说在Job的运行过程中,所有的元数据都被储存在内存中,在Job结束后会随着进程的结束自动消失:在这里我们推荐配置JobRepository去使用MySQL. 在这种情况下,Spring Batch在单次执行或者从一个执行到另外一个执行的时候会使用数据库去维护状态,Job执行的信息包

Cocos2d-x 3.1.1 学习日志11--一Windows下Android环境搭建(一定对你有用的!!)

安装步骤::(多么痛的领悟!!) 1. 配置JDK JDK下载地址: 设置环境变量: JAVA_HOME=C:\Program Files (x86)\Java\jdk1.7.0_21 CLASSPATH=.;%JAVA_HOME%\lib; Path增加%JAVA_HOME%\bin; 设置完后打开cmd,输入java -version 如果出现下面提示,表明环境变量设置成功: C:\Users\arlin>java -version java version "1.7.0_21&quo

大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)

引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用介绍.本文主要讲解如何搭建Hadoop+Hive的环境. 一.环境准备 1,服务器选择 本地虚拟机 操作系统:linux CentOS 7 Cpu:2核 内存:2G 硬盘:40G 说明:因为使用阿里云服务器每次都要重新配置,而且还要考虑网络传输问题,于是自己在本地便搭建了一个虚拟机,方便文件的传输以

S2SH开发环境搭建、框架整合、项目基础环境搭建

S2SH开发环境搭建.框架整合.项目基础环境搭建 1.S2SH框架整合 新建项目s2sh: 1.1添加jar包 1.1.1添加Struts的jar包 添加如下的jar包: commons-fileupload-1.2.2.jar commons-io-2.0.1.jar freemarker-2.3.19.jar ognl-3.0.5.jar struts2-core-2.3.4.1.jar xwork-core-2.3.4.1.jar 疑惑:这些jar可以从哪里获得呢? 对于一个框架来说,别人

Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程详解

作为重量级的跨平台开发的游戏引擎,Cocos2d-x在现今的手游开发领域占有重要地位.那么问题来了,作为Cocos2dx的学习者,它的可移植特性我们就需要掌握,要不然总觉得少一门技能.然而这个时候各种各样的问题也就来了,之前网上一直有零零碎碎的移植教程,但是都不完整,或是有这样或者那样的问题.今天刚刚研究成功了Cocos2dx-3.0版本项目的安卓平台移植问题,本人亲自完成了整个过程,将Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程 一起分享给大家.

Django项目: 项目环境搭建 ---- 一、创建django项目

项目环境搭建 一.创建django项目 1.创建python虚拟环境 在虚拟机上创建python虚拟环境,因为实际项目部署,实在linux mkvirtualenv -p /usr/bin/python3.6 tzproject 2.创建django项目 1.安装django 选择安装django2.1.x最新的一个版本2.1.10 pip install django==2.1.10 2.创建django项目 cd ~/project/ # cd到你想放django项目路径的地方 django

Spring Batch学习(一)介绍

为什么我们需要批处理? 我们不会总是想要立即得到需要的信息,批处理允许我们在请求处理之前就一个既定的流程开始搜集信息:比如说一个银行对账单,我们可以按月生成,并在用户查询之前开启一个批处理流程进行处理: 有时候它能让生意做得更好:比如说在线购物时,并不是说你买了一个产品零售商就立即发货,而是四五个小时后,统一发货: 更好的利用资源:让应该利用的处理能力闲置起来是一个大的浪费,我们可以定制处理让一个机器一个接一个的运行Job可以更好的利用机器的处理能力: 什么是批处理? 批处理是指在没有与用户进行