这里有新鲜出炉的精品教程,程序狗速度看过来!
Spring是什么呢?首先它是一个开源的项目,而且目前非常活跃;它是一个基于IOC和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层 中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;它实现了很优雅的MVC,对不同的数据访问技术提供了统一的接口,采用IOC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现Transcation Managment,等等
这篇文章主要给大家介绍了Spring Batch入门的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
SpringBatch介绍:
SpringBatch 是一个大数据量的并行处理框架。通常用于数据的离线迁移,和数据处理,⽀持事务、并发、流程、监控、纵向和横向扩展,提供统⼀的接⼝管理和任务管理;SpringBatch是SpringSource和埃森哲为了统一业界并行处理标准为广大开发者提供方便开发的一套框架。
官方地址:github.com/spring-projects/spring-batch
快速入门
pom.xml 添加
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-batch</artifactId>
- </dependency>
创建BatchConfig(可以是其他类名)
- @Configuration@EnableBatchProcessing public 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;
- }
- /*@Bean
- public FlatFileItemWriter<Person> flatFileItemWriter(DataSource dataSource) {
- FlatFileItemWriter<Person> 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"). < Person,
- Person > chunk(10).reader(flatFileItemReader).processor(processor).writer(jdbcBatchItemWriter).build();
- }
- // end::jobstep[]
- }
Spring Batch的分层架构
Spring Batch执行流程
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对PHPERZ的支持。
来源: http://www.phperz.com/article/17/0907/338343.html