对于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 < String > { @Override public String read() throws Exception , UnexpectedInputException , ParseException , NonTransientResourceException { return RandomStringUtils.randomAlphabetic(10); } }
因为,是读取文件中的内容,所以不用自定义reader实现。
直接使用FlatFileItemReader,在Batch的config中配置就可以了。
@Bean public ItemReader < String > textReader() { FlatFileItemReader < String > reader = new FlatFileItemReader < > (); File file = new File("D:\\FTP\\ttest.txt"); reader.setResource(new FileSystemResource(file)); reader.setLineMapper(new LineMapper < String > () { @Override public String mapLine(String line, int lineNumber) throws Exception { return line; } }); return reader; }
itemProcess
这里的话,使用同一种处理方式。
public class MyItemProcessor implements ItemProcessor < String, String > { @Override public String process(String s) throws Exception { return s + "---------PROCESSED"; } }
itemWriter
使用同一种处理方式。
public class MyItemWriter implements ItemWriter < String > { @Override public void write(List < ? extends String > items) throws Exception { for (String item: items) { System.out.println(item); } } }
配置完成Batch Config
@Configuration @EnableBatchProcessing public class BatchConfiguration extends DefaultBatchConfigurer { @Autowired public StepBuilderFactory stepBuilderFactory; @Autowired public JobBuilderFactory jobBuilderFactory; @Bean public MyItemProcessor processor() { return new MyItemProcessor(); } @Bean public ItemWriter < String > writer() { return new MyItemWriter(); } @Bean public ItemReader < String > textReader() { FlatFileItemReader < String > reader = new FlatFileItemReader < > (); File file = new File("D:\\FTP\\ttest.txt"); reader.setResource(new FileSystemResource(file)); reader.setLineMapper(new LineMapper < String > () { @Override public String mapLine(String line, int lineNumber) throws Exception { return line; } }); return reader; } @Bean public ItemReader < String > stringReader() { return new MyItemReader(); } @Override public void setDataSource(DataSource dataSource) { super.setDataSource(dataSource); } @Bean public Step myStep() { return stepBuilderFactory .get("step1") //这个chunk size是最后调用写入的时候,一次性写入多少条已处理的数据 . < String, String > 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(); } }
spring batch的简单实例就为你分享到这里了,更多实例,可以继续关注奇Q工具网的java实例栏目来了解。
推荐阅读: