Spring Batch入门教程篇

网友投稿 435 2023-05-08


Spring Batch入门教程篇

SpringBatch介绍:

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

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

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

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

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

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

快速入门

pom.xml 添加

org.springframework.boot

spring-boot-starter-batch

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

@Configuration

@EnableBatchProcessing

public class BatchConfig {

// tag::readerwriterprocessor[]

@Bean

public FlatFileItemReader flatFileItemReader() {

FlatFileItemReader reader = new FlatFileItemReader<>();

reader.setResource(new ClassPathResource("sample-data.csv"));

FixedLengthTokenizer fixedLengthTokenizer = new FixedLengthTokenizer();

reader.setLineMapper(new DefaultLineMapper() {{

setLineTokenizer(new DelimitedLineTokenizer() {{

setNames(new String[]{"firstName", "lastName"});

}});

setFieldSetMapper(new BeanWrapperFieldSetMapper() {{

setTargetType(Person.class);

}});

}});

return reader;

}

@Bean

public JdbcPagingItemReader jdbcPagingItemReader(DataSource dataSource) {

JdbcPagingItemReader reader = new JdbcPagingItemReader<>();

readROVSGer.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() {{

put("person_id", Order.ASCENDING);

}});

}});

reader.setParameterValues(new HashMap() {{

put("lastName", "DOE");

}});

reader.setRowMapper(new BeanPropertyRowMapper<>(Person.class));

return reader;

}

@Bean

public JdbcBatchItemWriter jdbcBatchItemWriter(DataSource dataSource) {

JdbcBatchItemWriter writer = new JdbcBatchItemWriter<>();

writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>());

writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");

writer.setDataSource(dataSource);

return writer;

}

/*@Bean

public FlatFileItemWriter flatFileItemWriter(DataSource dataSource) {

FlatFileItemWriter writer = new FlatFileItemWriter<>();

writer.setAppendAllowed(true);

writer.setEncoding("UTF-8");

// writer.set(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) {

/*CompositeItemProcessor compositeItemProcessor = new CompositeItemProcessor();

compositeItemProcessor.setDelegates(Lists.newArrayList(processor, processor));*/

return stepBuilderFactory.get("step1")

.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执行流程

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解Angular4中路由Router类的跳转navigate
下一篇:JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~