SpringBatch批处理框架怎么用
创始人
2024-12-24 13:21:01
0次

使用Spring Batch做为批处理框架,可以完成常规的数据量不是特别大的离线计算。

现在写一个简单的入门版示例。

这里默认大家已经掌握了Spring Batch的基本知识,示例只是为了快速上手实践

目标1:程序随机生成字符串,经过Spring Batch后,统一在字符串后加入“----PROCESSED”,并输出

目标2:程序读取txt文件,经过Spring Batch后,统一加入如上字段,并输出

Spring Batch的流程

读取数据----itemReader  处理数据----itemProcess  数据写入----itemWrite

分析目标可知,两个目标的输入数据源不同,处理方式基本一致,数据完成后的写入规则一致

由此可以分段完成代码

itemReader

目标一

这里没有使用Spring Batch自带的集中reader,所以自定义了随机生成字符串的reader

这里代码并不完善,reader会无线循环生成随机字符串,但不影响本次学习的目的

public class MyItemReader implements ItemReader {  @Override  public String read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {    return RandomStringUtils.randomAlphabetic(10);  }}

目标二

由于是读取文件中的内容,所以不用自定义reader实现,可直接使用FlatFileItemReader,在Batch的config中配置即可

@Bean  public ItemReader textReader(){     FlatFileItemReader reader=new FlatFileItemReader<>();    File file = new File("D:\\FTP\\ttest.txt");    reader.setResource(new FileSystemResource(file));    reader.setLineMapper(new LineMapper() {      @Override      public String mapLine(String line, int lineNumber) throws Exception {        return line;      }    });    return reader;   }

itemProcess

这里采用同一种处理方式即可

public class MyItemProcessor implements ItemProcessor {   @Override  public String process(String s) throws Exception {    return s+"---------PROCESSED";  }}

itemWriter

也采用同一种即可

public class MyItemWriter implements ItemWriter {  @Override  public void write(List items) throws Exception {    for (String item : items) {      System.out.println(item);    }  }}

配置完成Batch Config

@Configuration@EnableBatchProcessingpublic class BatchConfiguration extends DefaultBatchConfigurer {   @Autowired  public StepBuilderFactory stepBuilderFactory;  @Autowired  public JobBuilderFactory jobBuilderFactory;   @Bean  public MyItemProcessor processor(){    return new MyItemProcessor();  }   @Bean  public ItemWriter writer(){    return new MyItemWriter();  }   @Bean  public ItemReader textReader(){    FlatFileItemReader reader=new FlatFileItemReader<>();    File file = new File("D:\\FTP\\ttest.txt");    reader.setResource(new FileSystemResource(file));    reader.setLineMapper(new LineMapper() {      @Override      public String mapLine(String line, int lineNumber) throws Exception {        return line;      }    });    return reader;  }   @Bean  public ItemReader stringReader(){    return new MyItemReader();  }   @Override  public void setDataSource(DataSource dataSource) {    super.setDataSource(dataSource);  }   @Bean  public Step myStep(){    return stepBuilderFactory        .get("step1")        //这个chunk size是最后调用写入的时候,一次性写入多少条已处理的数据        .chunk(10)//        .reader(textReader())        .reader(stringReader())        .processor(processor())        .writer(writer())        .build();   }   @Bean  public Job MyJob(){    return jobBuilderFactory        .get("MyJOB")        .listener(new JobExecutionListenerSupport(){          //所有处理结束后调用          @Override          public void afterJob(JobExecution jobExecution) {            if(jobExecution.getStatus() == BatchStatus.COMPLETED){              System.out.println("OK");            }          }        })        .flow(myStep())        .end()        .build();  }}

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...