简介

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. java内存模型优化建议

    八.Java编程建议 根据GC的工作原理,我们可以通过一些技巧和方式,让GC运行更加有效率,更加符合应用程序的要求.一些关于程序设计的几点建议: 1)最基本的建议就是尽早释放无用对象的引用.大多数程序 ...

  2. iOS开发--邮箱,电话号码,身份证正则表达式验证

    //邮箱 + (BOOL) validateEmail:(NSString *)email {     NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@ ...

  3. 新Android工程src和layout文件夹为空

    问题:SDK和ADT版本冲突 解决方案: 1.菜单->Help->Install  New Software.. 2.在work with放入地址:http://dl-ssl.google ...

  4. PHP使用CURL详解

    CURL是一个非常强大的开源库,支持很多协议,包括HTTP.FTP.TELNET等,我们使用它来发送HTTP请求.它给我 们带来的好处是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS ...

  5. linux查询cpu核心数

    linux怎么查询cpu核心数 1.查看逻辑CPU个数: #cat /proc/cpuinfo |grep "processor"|sort -u|wc -l24 2.由于有超线程 ...

  6. 294. Flip Game II

    题目: You are playing the following Flip Game with your friend: Given a string that contains only thes ...

  7. 20_采用ContentProvider对外共享数据

    <AndroidManifest.xml> <application        <provider android:name=".PersonProvider&q ...

  8. C# const与static的理解

    C#  const与static的理解 static readonly与 const变量,作用是一样的,无论访问修饰符是不是public,还是其它(private. protected.interna ...

  9. ubuntu 默认 进入 命令行

    图形模式下,首先进入终端:1. 运行 sudo vi/etc/default/grub2. 找到 GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”3.改为 GRUB_ ...

  10. Order to Cash Process

    order to cash process steps can be listed as below · Enter the Sales Order · Book the Sales Order · ...