简介

SpringBatch 是一个大数据量的并行处理框架。通常用于数据的离线迁移,和数据处理,⽀持事务、并发、流程、监控、纵向和横向扩展,提供统⼀的接⼝管理和任务管理;SpringBatch是SpringSource和埃森哲为了统一业界并行处理标准为广大开发者提供方便开发的一套框架。

官方地址:github.com/spring-projects/spring-batch

  • SpringBatch 本身提供了重试,异常处理,跳过,重启、任务处理统计,资源管理等特性,这些特性开发者看重他的主要原因;

  • SpringBatch 是一个轻量级的批处理框架;

  • SpringBatch 结构分层,业务与处理策略、结构分离;

  • 任务的运行的实例状态,执行数据,参数都会落地到数据库;

快速入门

pom.xml 添加

  1. <dependency>
       <groupId>org.springframework.boot</groupId>
  2.    <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>

创建BatchConfig(可以是其他类名)

  1. @Configuration
  2. @EnableBatchProcessingpublic class BatchConfig {    // tag::readerwriterprocessor[]
  3.   @Bean    
       public FlatFileItemReader<Person> flatFileItemReader() {
  4.     FlatFileItemReader<Person> reader = new FlatFileItemReader<>();
  5.     reader.setResource(new ClassPathResource("sample-data.csv"));
  6.     FixedLengthTokenizer fixedLengthTokenizer = new FixedLengthTokenizer();
  7.     reader.setLineMapper(new DefaultLineMapper<Person>() {{
  8.         setLineTokenizer(new DelimitedLineTokenizer() {{
  9.             setNames(new String[]{"firstName", "lastName"});
  10.         }});
  11.         setFieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{
  12.             setTargetType(Person.class);
  13.         }});
  14.     }});        return reader;
  15.  }
  16.  @Bean    
      public JdbcPagingItemReader<Person> jdbcPagingItemReader(DataSource dataSource) {
  17.     JdbcPagingItemReader<Person> reader = new JdbcPagingItemReader<>();
  18.        reader.setDataSource(dataSource);
  19.        reader.setFetchSize(100);
  20.        reader.setQueryProvider(new MySqlPagingQueryProvider() {{
  21.            setSelectClause("SELECT person_id,first_name,last_name");
  22.            setFromClause("from people");
  23.            setWhereClause("last_name=:lastName");
  24.            setSortKeys(new HashMap<String, Order>() {{
  25.                put("person_id", Order.ASCENDING);
  26.            }});
  27.        }});
  28.        reader.setParameterValues(new HashMap<String, Object>() {{
  29.            put("lastName", "DOE");
  30.        }});
  31.        reader.setRowMapper(new BeanPropertyRowMapper<>(Person.class));        return reader;
  32.    }
  33.  @Bean    
      public JdbcBatchItemWriter<Person> jdbcBatchItemWriter(DataSource dataSource) {
  34.    JdbcBatchItemWriter<Person> writer = new JdbcBatchItemWriter<>();
  35.    writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
  36.    writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
  37.    writer.setDataSource(dataSource);        return writer;
  38.  }    
  39.    // end::readerwriterprocessor[]
  40.    // tag::jobstep[]
  41.  @Bean    
     public Job importUserJob(JobBuilderFactory jobBuilderFactory, JobCompletionNotificationListener listener, Step step) {        
          return jobBuilderFactory.get("importUserJob")
  42.          .incrementer(new RunIdIncrementer())
  43.          .listener(listener)
  44.          .start(step)
  45.          .build();
  46.  }
  47.   @Bean    
      public Step step1(StepBuilderFactory stepBuilderFactory,
                   PersonItemProcessor processor,
                   ItemWriter jdbcBatchItemWriter,
                   ItemReader flatFileItemReader) {        
          return stepBuilderFactory.get("step1")
  48.                  .<Person, Person>chunk(10)
  49.                .reader(flatFileItemReader)
  50.                .processor(processor)
  51.                .writer(jdbcBatchItemWriter)
  52.                .build();
  53.    }    // end::jobstep[]
    }

Spring Batch的分层架构

  • Insfrastructure 策略管理:包括任务的失败重试,异常处理,事务,skip,以及数据的输入输出(文本文件,DB,Message)

  • Core: springBatch 的核心,包括JobLauch,job,step等等

  • Application: 业务处理,创建任务,决定任务的执行方式(定时任务,手动触发等)

Spring Batch执行流程

YII内置验证规则的更多相关文章

  1. thinkphp 5内置验证规则-基本版

    内置规则 系统内置的验证规则如下: 格式验证类 require 验证某个字段必须,例如: 'name'=>'require' number 或者 integer 验证某个字段的值是否为数字(采用 ...

  2. tp5内置验证规则

    验证规则 描述 require 必须验证 alpha 是否为字母 alphaNum 是否为字母和数字 alphaDash 是否为字母.数字,下划线_及破折号- number 是否为数字 integer ...

  3. jQuery:validate内置验证的使用

    (1)required:true 必输字段(2)remote:"check.php" 使用ajax方法调用check.php验证输入值(3)email:true 必须输入正确格式的 ...

  4. yii框架中验证器声明一组内置验证器可以使用短名称引用

    1.内置验证器的短名称分别有: boolean: yii\validators\BooleanValidator captcha: yii\captcha\CaptchaValidator compa ...

  5. Flex 内置验证器—验证用户输入

    今晚对于Flex中的Validator类(所有验证器的父类)测试一下 ---->其中常用的验证类有StringValidator,NumberValidator,DateValidator 测试 ...

  6. struts2学习(11)struts2验证框架1.验证简介、内置验证

    一.Struts2验证简介: 二.struts2内置验证: 下面例子,需求是:为用户注册进行验证: com.cy.model.User.java: package com.cy.model; publ ...

  7. gin内置验证器使用

    gin内置验证器使用 func TopicUrl(f1 validator.FieldLevel) bool { return true //返回true表示验证成功 } func main(){ r ...

  8. YII 表单验证规则

    官方文档:http://www.yiichina.com/guide/form.model 类参考手册:http://www.yiichina.com/api/CValidatorhttp://www ...

  9. Yii 表单验证规则---总结

    Filter: 过滤,'filter'=>'trim',表示去空格 Required:必须的,表示不能为空 Match: 匹配正则,需要和pattern一起使用,定义正则表达式,'pattern ...

随机推荐

  1. Java多线程-线程的调度(守护线程)

    本文转自http://www.cnblogs.com/linjiqin/p/3210004.html 感谢作者 守护线程与普通线程写法上基本没啥区别,调用线程对象的方法setDaemon(true), ...

  2. Ubuntu--服务器版本系统安装图解教程

    附Ubuntu Server 13.04系统镜像下载地址: 32位:http://mirrors.163.com/ubuntu-releases/13.04/ubuntu-13.04-server-i ...

  3. dreamweaver cs5中提示扩展管理不可用

    下载: Extension Manager CS5.5 for Windows 安装后重启就能用了

  4. Oracle ->> 随机函数

    SQL SERVER下生成随机数据干得多,可是到了Oracle下我就傻了.没用过Oracle,不知道该怎么办?SQL SERVER下依靠TABLESAMPLE或者CHECKSUM(NEWID())来做 ...

  5. linux c 生成uuid

    /********方法一**********/#include <stdio.h> #include <stdlib.h> #include <string.h> ...

  6. 创建下拉列表并通过ajax填充下拉数据

    $(document).ready(function(e) { jQuery.post('${basePath}/customerService/getCustomerService4List.do' ...

  7. java实现附件预览(openoffice+swftools+flexpaper)

    先附上本人参考的文章,基于的 flexpaper版本 为 1.5,本人由于使用的是 2.1.9 ,故之后说明: 已经支持加载中文文件名 代码下载 1.概述 主要原理 1.通过第三方工具openoffi ...

  8. hihoCoder 1040 矩形判断(计算几何)

    http://hihocoder.com/problemset/problem/1040 首先判断四条线段是否相交,给出八个点,如果有一些点重合,并且不同坐标的点只有4个的话,表示可以构成四边形. 然 ...

  9. 寄售Consignment和VMI有什么区别?

    Consignment 寄存一般是指卖方把货物存放在买方所属仓库,消耗后结帐.库存水平控制和货物的物理管理都由买方负责.这是目前很多大卖场通行的做法.典型的VMI一般也是指卖方把货物存放在买方附近的仓 ...

  10. pl/sql programming 05 循环迭代处理

    使用循环应考虑的因素 1. 循环什么时候结束 2. 什么时候测试是否该结束循环 3. 采用这种循环的原因 1. 普通循环(简单循环) 使用场合, 不能确定循环执行多少次, 要求循环至少执行一次. 另外 ...