Spring Batch是一个轻量级的框架,完全面向Spring的批处理框架,用于企业级大量的数据读写处理系统。以POJO和Spring 框架为基础,包括日志记录/跟踪,事务管理、 作业处理统计工作重新启动、跳过、资源管理等功能。

       业务方案:

1、批处理定期提交。

2、并行批处理:并行处理工作。

3、企业消息驱动处理

4、大规模的并行处理

5、手动或是有计划的重启

6、局部处理:跳过记录(如:回滚)

      技术目标:

1、利用Spring编程模型:使程序员专注于业务处理,让Spring框架管理流程。

2、明确分离批处理的执行环境和应用。

3、提供核心的,共通的接口。

4、提供开箱即用(out of the box)的简单的默认的核心执行接口。

5、提供Spring框架中配置、自定义、和扩展服务。

6、所有存在的核心服务可以很容的被替换和扩展,不影响基础层。

7、提供一个简单的部署模式,利用Maven构建独立的Jar文件。

实现步骤:

1.定义处理对象

2.创建中间转换器 ***ItemProcessor 实现 ItemProcessor<I,O>接口

3.创建工作Job BatchConfiguration 主要处理读数据、处理数据、写数据等操作

4.创建listener job执行监听器

 

 

一般的批处理系统需要处理大量的数据, 内部消化单条记录失败的情况, 还要管理中断,在重启后也不去重复执行已经处理过的部分

 

 Spring Batch单/多处理单元(processors), 以及多个微线程(tasklets)

具体实现过程:

1.引入jar:

<!-- Spring-boot启动项目 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.3.1.RELEASE</version></parent><properties><java.version>1.8</java.version></properties><!--Spring batch核心包-><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-batch</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies>

2.配置application.properties :配置数据源

######mysql\u6570\u636E\u6E90#########
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.password= wbw123456
spring.datasource.url= jdbc:mysql://localhost/mydatabase
spring.datasource.username=root
<a target=_blank href="http://projects.spring.io/spring-batch/">点击打开链接</a>

3.新建实体类

package com.my.gs.batch.processing.domain;public class Person {//IDprivate Integer personId;//姓名private String personName;//年龄private String personAge;//性别private String personSex;public Person(){};public Person( String personName, String personAge,String personSex) {this.personName = personName;this.personAge = personAge;this.personSex = personSex;}public Integer getPersonId() {return personId;}public void setPersonId(Integer personId) {this.personId = personId;}public String getPersonName() {return personName;}public void setPersonName(String personName) {this.personName = personName;}public String getPersonAge() {return personAge;}public void setPersonAge(String personAge) {this.personAge = personAge;}public String getPersonSex() {return personSex;}public void setPersonSex(String personSex) {this.personSex = personSex;}}

4.中间转换器:

package com.my.gs.batch.processing.itemprocessor;import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;import com.my.gs.batch.processing.domain.Person;
/*** 中间转换器* @author wbw**/
public class PersonItemProcessor implements ItemProcessor<Person, Person> {//查询private static final String GET_PRODUCT = "select * from Person where personName = ?";private static final Logger log = LoggerFactory.getLogger(PersonItemProcessor.class);@Autowiredprivate JdbcTemplate jdbcTemplate;@Overridepublic Person process(final Person person) throws Exception {List<Person> personList = jdbcTemplate.query(GET_PRODUCT, new Object[] {person.getPersonName()}, new RowMapper<Person>() {@Overridepublic Person mapRow( ResultSet resultSet, int rowNum ) throws SQLException {Person p = new Person();p.setPersonName(resultSet.getString(1));p.setPersonAge(resultSet.getString(2));p.setPersonSex(resultSet.getString(3));return p;}});if(personList.size() >0){log.info("该数据已录入!!!");}String sex = null;if(person.getPersonSex().equals("0")){sex ="男";}else{sex ="女";}log.info("转换 (性别:"+person.getPersonSex()+") 为 (" + sex + ")");final Person transformedPerson = new Person(person.getPersonName(), person.getPersonAge(),sex);log.info("转换 (" + person + ") 为 (" + transformedPerson + ")");return transformedPerson;}}

5.处理具体工作业务  主要包含三个部分:读数据、处理数据、写数据

package com.my.gs.batch.processing.configuration;import javax.sql.DataSource;import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecutionListener;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider;
import org.springframework.batch.item.database.JdbcBatchItemWriter;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.core.JdbcTemplate;import com.my.gs.batch.processing.domain.Person;
import com.my.gs.batch.processing.itemprocessor.PersonItemProcessor;
/*** 处理具体工作业务  主要包含三个部分:读数据、处理数据、写数据* @author wbw**/
@Configuration
@EnableBatchProcessing
public class PersonBatchConfiguration {//插入语句private static final String PERSON_INSERT = "INSERT INTO Person (personName, personAge,personSex) VALUES (:personName, :personAge,:personSex)";public static final String Person_INSERT = "INSERT INTO Person (id, name,description,quantity) VALUES (:id, :name,:description,:quantity)";// tag::readerwriterprocessor[] 1.读数据@Beanpublic ItemReader<Person> reader() {FlatFileItemReader<Person> reader = new FlatFileItemReader<Person>();//加载外部文件数据 文件类型:CSVreader.setResource(new ClassPathResource("sample-data.csv"));reader.setLineMapper(new DefaultLineMapper<Person>() {{setLineTokenizer(new DelimitedLineTokenizer() {{setNames(new String[] { "personName","personAge","personSex" });}});setFieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{setTargetType(Person.class);}});}});return reader;}//2.处理数据@Beanpublic PersonItemProcessor processor() {return new PersonItemProcessor();}//3.写数据@Beanpublic ItemWriter<Person> writer(DataSource dataSource) {JdbcBatchItemWriter<Person> writer = new JdbcBatchItemWriter<Person>();writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<Person>());writer.setSql(PERSON_INSERT);writer.setDataSource(dataSource);return writer;}// end::readerwriterprocessor[]// tag::jobstep[]@Beanpublic Job importUserJob(JobBuilderFactory jobs, @Qualifier("step1")Step s1, JobExecutionListener listener) {return jobs.get("importUserJob").incrementer(new RunIdIncrementer()).listener(listener).flow(s1).end().build();}@Beanpublic Step step1(StepBuilderFactory stepBuilderFactory, ItemReader<Person> reader,ItemWriter<Person> writer, ItemProcessor<Person, Person> processor) {return stepBuilderFactory.get("step1").<Person, Person> chunk(10).reader(reader).processor(processor).writer(writer).build();}// end::jobstep[]@Beanpublic JdbcTemplate jdbcTemplate(DataSource dataSource) {return new JdbcTemplate(dataSource);}}

6.监听器:用于处理任务执行之后和之前

<pre name="code" class="java">package com.my.gs.batch.processing.listener;import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.core.BatchStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.listener.JobExecutionListenerSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;import com.my.gs.batch.processing.domain.Person;
/*** Job执行监听器* @author wbw**/
@Component
public class JobCompletionNotificationListener extends JobExecutionListenerSupport {private static final String PERSON_SQL = "SELECT personName, personAge,personSex FROM Person";private static final Logger log = LoggerFactory.getLogger(JobCompletionNotificationListener.class);@Autowiredprivate  JdbcTemplate jdbcTemplate;@Autowiredpublic JobCompletionNotificationListener(JdbcTemplate jdbcTemplate) {if(this.jdbcTemplate==null){this.jdbcTemplate = jdbcTemplate;}}@Overridepublic void afterJob(JobExecution jobExecution) {if(jobExecution.getStatus() == BatchStatus.COMPLETED) {log.info("!!! JOB 执行完成!");List<Person> results = jdbcTemplate.query(PERSON_SQL, new RowMapper<Person>() {@Overridepublic Person mapRow(ResultSet rs, int row) throws SQLException {return new Person(rs.getString(1), rs.getString(2),rs.getString(3));}});log.info("入库条数---------"+results.size());for (Person person : results) {log.info("新增 <" + person.getPersonName() + "> 成功!!!!!");}}}/* (non-Javadoc)* @see org.springframework.batch.core.listener.JobExecutionListenerSupport#beforeJob(org.springframework.batch.core.JobExecution)*/@Overridepublic void beforeJob(JobExecution jobExecution) {// TODO Auto-generated method stubsuper.beforeJob(jobExecution);}}
7.新建csv文件
<img src="data:image/png;base64,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" alt="" />
</pre><pre code_snippet_id="1563739" snippet_file_name="blog_20160124_10_8470765" name="code" class="java">8.启动执行
<pre name="code" class="java">package com.my.batch;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Application {public static void main(String[] args) throws Exception {SpringApplication.run(Application.class, args);}
}

更多相关资源:http://projects.spring.io/spring-batch/

Spring Boot 集成 批处理框架Spring batch相关推荐

  1. Spring Boot集成Quartz注入Spring管理的类

    摘要: 在Spring Boot中使用Quartz时,在JOB中一般需要引用Spring管理的Bean,通过定义Job Factory实现自动注入. Spring有自己的Schedule定时任务,在S ...

  2. spring Boot 2 运维篇(spring boot程序的打包与部署,多环境开发配置文件的配置,spring boot集成日志框架)

    目录 1.SpringBoot程序的打包与运行 程序打包 程序运行 SpringBoot程序打包失败处理 命令行启动常见问题及解决方案 SpringBoot项目快速启动(Linux版) 2.配置高级 ...

  3. spring boot—集成log4j2日志框架

    文章目录 市场上的日志框架 spring boot日志框架关系 移除默认日志框架 切换为log4j2日志框架 市场上的日志框架   1)日志门面最常用的是slf4j   2)日志实现最常用的是logb ...

  4. Spring Boot集成Jasypt安全框架

    Jasypt安全框架提供了Spring的集成,主要是实现 PlaceholderConfigurerSupport类或者其子类. 在Sring 3.1之后,则推荐使用PropertySourcesPl ...

  5. 批处理框架 Spring Batch,数据迁移量过大如何保证内存?

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/topdeveloperr/ article/details/88843186 概述 本篇博客是记录使用spring batch ...

  6. spring boot 集成框架事例

    因为很多人再问要一个搭好的框架实例,这里我补上, 首先,需要安装一个maven,因为项目是基于maven 来创建的. 其次,项目是一个基本的框架,不涉及任何的项目逻辑,代码是本人自己写的绝对原创. 最 ...

  7. 蚂蚁金服开源增强版 Spring Boot 的研发框架!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:gitee.com/sofastack/sofa-b ...

  8. 蚂蚁金服开源增强版Spring Boot 的研发框架!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! SOFABoot 是蚂蚁金服开源的基于 Spring Bo ...

  9. 6.3 Spring Boot集成mongodb开发

    6.3 Spring Boot集成mongodb开发 本章我们通过SpringBoot集成mongodb,Java,Kotlin开发一个极简社区文章博客系统. 0 mongodb简介 Mongo 的主 ...

最新文章

  1. 神州易桥财税 java项目经理_【高级项目经理(体系运营)职责】2021年燕园财税高级项目经理(体系运营)岗位职责-看准网...
  2. 当你感到学习困难的时候,你在走上坡路!
  3. linux防火墙没看3306访问不,Linux配置防火墙,开启80端口、3306端口
  4. Python FastApi:快速建立docker容器/挂载共享文件夹/导入导出
  5. 现代软件工程 作业 最后一周总结
  6. 解决linux下QtCreator无法输入中文的情况
  7. html 中avi视频插件,JDG让一追二击败V5!Kanavi降维打击,逆版本选英雄不按常理出牌...
  8. flask-文件上传/下载
  9. 免费python编程自学网站-免费学习Python编程的3个优秀的网站资源
  10. linux类似everything的软件,安装linux下强大的文件工具fsearch,与windows下Everything类似...
  11. Manjaro 安装xmind 8
  12. Ecshop3.x漏洞复现
  13. android 本地数据库持久化框架,android数据库持久化框架, ormlite框架,
  14. 共享充电线项目市场分析报告
  15. 锚点的作用是什么?如何创建锚点?
  16. Poster Design
  17. Day_04 传智健康项目-预约管理-套餐管理
  18. 【进阶实战】用PaddlePaddle检测空气质量
  19. matlab中(:)的部分使用
  20. NOIP 2012 国王游戏

热门文章

  1. Xilinx SDx 2018.3安装
  2. 剑侠世界职业优缺点简介
  3. 一文带你了解,色环电阻失效相关知识
  4. 微博创作者网址及申请条件,微博创作者收益
  5. 大唐之路(4)一号店入驻要求
  6. Consul作为配置中心,配置Asp.Net Core应用程序 依据key/value动态更新
  7. 融合注意力机制和Bi-LSTM的旅游评价情感分析模型
  8. 软碟通 (UltraISO)制作启动盘
  9. 云超融合数据中心 CloudFabric
  10. 关于opencv fitLine直线拟合得斜率及截距