简介

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

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

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

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

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

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

快速入门

pom.xml 添加

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

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

@Configuration
@EnableBatchProcessingpublic class BatchConfig {    // tag::readerwriterprocessor[]
  @Bean    
   public FlatFileItemReader<Person> flatFileItemReader() {
    FlatFileItemReader<Person> reader = new FlatFileItemReader<>();
    reader.setResource(new ClassPathResource("sample-data.csv"));
    FixedLengthTokenizer fixedLengthTokenizer = new FixedLengthTokenizer();
    reader.setLineMapper(new DefaultLineMapper<Person>() {{
        setLineTokenizer(new DelimitedLineTokenizer() {{
            setNames(new String[]{"firstName", "lastName"});
        }});
        setFieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{
            setTargetType(Person.class);
        }});
    }});        return reader;
 }  @Bean    
  public JdbcPagingItemReader<Person> jdbcPagingItemReader(DataSource dataSource) {
    JdbcPagingItemReader<Person> reader = new JdbcPagingItemReader<>();
       reader.setDataSource(dataSource);
       reader.setFetchSize(100);        reader.setQueryProvider(new MySqlPagingQueryProvider() {{
           setSelectClause("SELECT person_id,first_name,last_name");
           setFromClause("from people");
           setWhereClause("last_name=:lastName");
           setSortKeys(new HashMap<String, Order>() {{
               put("person_id", Order.ASCENDING);
           }});
       }});
       reader.setParameterValues(new HashMap<String, Object>() {{
           put("lastName", "DOE");
       }});
       reader.setRowMapper(new BeanPropertyRowMapper<>(Person.class));        return reader;
   }  @Bean    
  public JdbcBatchItemWriter<Person> jdbcBatchItemWriter(DataSource dataSource) {
   JdbcBatchItemWriter<Person> writer = new JdbcBatchItemWriter<>();
   writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());
   writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
   writer.setDataSource(dataSource);        return writer;
 }    
   // end::readerwriterprocessor[]    // tag::jobstep[]
 @Bean    
 public Job importUserJob(JobBuilderFactory jobBuilderFactory, JobCompletionNotificationListener listener, Step step) {        
      return jobBuilderFactory.get("importUserJob")
         .incrementer(new RunIdIncrementer())
         .listener(listener)
         .start(step)
         .build();
 }   @Bean    
  public Step step1(StepBuilderFactory stepBuilderFactory,
               PersonItemProcessor processor,
               ItemWriter jdbcBatchItemWriter,
               ItemReader flatFileItemReader) {        
      return stepBuilderFactory.get("step1")
                 .<Person, Person>chunk(10)
               .reader(flatFileItemReader)
               .processor(processor)
               .writer(jdbcBatchItemWriter)
               .build();
   }    // 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. 点击UITableView的cell展开收缩

    在项目中有个需求,点击表视图的单元格展开,再点击另外一个单元格或者本身又收缩,经过一段时间尝试,实现了该功能,现在记录分享总结下.   首先要理解UITableView代理方法调用的先后顺序.   当 ...

  2. android+apimonitor+genymotion

    1. 安装genymotion: http://www.genymotion.net/ 2. 设置使用adb Setting--adb--选择sdk的目录 3. apimonitor https:// ...

  3. qt中如何启动其他应用程序(如果不成功,还有许多原因即QProcess::ProcessError可供分析)

    类 QDesktopServices 提供的方法 访问 常用的桌面 服务 , 如 浏览 器 . 播放器. 电子邮件客户端 . 我们 使用 QDesktopServices :: openUrl(url ...

  4. 扩展 delphi 泛型 以实现类似lambda功能 , C#中的any count first last 等扩展方法

    扩展 delphi 泛型 以实现类似lambda功能 , C#中的any count first last 等扩展方法 在C#中对泛型的扩展,输入参数是泛型本身的内容,返回值则是bool.基于这一点, ...

  5. wordcount数据流过程解析

    (1)执行hadoopFile()操作,其中有生成HadoopRDD的new 方法.然后执行map方法.pair => pair._2.toString,只对Value值进行操作.在textFi ...

  6. TOMCAT服务器不写端口号、不写项目名访问项目、虚拟目录配置

    一.不写端口. 这个问题都被问烂了,因为TOMCAT默认的访问端口为8080,而TCP/IP协议默认80端口访问,大家之所以看到别的网站都不写端口号是因为人家用的的80端口访问的,而80端口因为的TC ...

  7. Docker基础技术:DeviceMapper

    在上一篇介绍AUFS的文章中,大家可以看到,Docker的分层镜像是怎么通过UnionFS这种文件系统做到的,但是,因为Docker首选的AUFS并不在Linux的内核主干里,所以,对于非Ubuntu ...

  8. c#操作txt

    C#追加文件 StreamWriter sw = File.AppendText(Server.MapPath(".")+"\\myText.txt"); sw ...

  9. Oracle EBS 寄售业务总结

    总述: 须通过一揽子采购协议(BPA)明确采购方与供应商之间的寄售关系,及各种协议条款: 通过来源补充规则(Sourcing Rules)明确物料的供应商以及分配规则: 通过合格供应商列表(ASL)明 ...

  10. ERROR 1442 (HY000):because it is already used by statement which invoked this stored function/tr

    看到mysql的触发器,随手写了一个: mysql> create trigger t_ai_test -> after insert on test -> for each row ...