Spring Batch实例详解
来源:互联网 发布:淘宝零食模块怎么写 编辑:程序博客网 时间:2024/06/02 03:32
Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。
Spring Batch可以提供大量的,可重复的数据处理功能,包括日志记录/跟踪,事务管理,作业处理统计工作重新启动、跳过,和资源管理等重要功能。
业务方案:
1、批处理定期提交。
2、并行批处理:并行处理工作。
3、企业消息驱动处理
4、大规模的并行处理
5、手动或是有计划的重启
6、局部处理:跳过记录(如:回滚)
技术目标:
1、利用Spring编程模型:使程序员专注于业务处理,让Spring框架管理流程。
2、明确分离批处理的执行环境和应用。
3、提供核心的,共通的接口。
4、提供开箱即用(out of the box)的简单的默认的核心执行接口。
5、提供Spring框架中配置、自定义、和扩展服务。
6、所有存在的核心服务可以很容的被替换和扩展,不影响基础层。
7、提供一个简单的部署模式,利用Maven构建独立的Jar文件
Spring batch结构:
这种分层结构有三个重要的组成部分:应用层、核心层、基础架构层。应用层包含所有的批处理作业,通过Spring框架管理程序员自定义的代码。核心层包含了Batch启动和控制所需要的核心类,如:JobLauncher、Job和step等。应用层和核心层建立在基础构架层之上,基础构架层提供共通的读(ItemReader)、写(ItemWriter)、和服务(如RetryTemplate:重试模块。可以被应用层和核心层使用)。
案例分析:
excel文件:aaa.csv
id,name,age,scope1,aa,44,o2,dd,55,b3,ss,66,c
需求:将aaa.csv文件的内容复制到bbb.csv文件中:
一、Spring Batch配置文件如下:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:batch="http://www.springframework.org/schema/batch" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.2.xsd" default-autowire="byName"> <bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher"> <property name="jobRepository" ref="jobRepository"/> </bean> <bean id="transactionManager" class="org.springframework.batch.support.transaction.ResourcelessTransactionManager"/> <bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean"> <property name="transactionManager" ref="transactionManager"/> </bean> <batch:job id="job"> <batch:step id="step1"> <batch:tasklet > <batch:chunk reader="csvItemReader" writer="csvItemWriter" commit-interval="1"> </batch:chunk> </batch:tasklet> </batch:step> </batch:job> <bean id="csvItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step"> <property name="resource" value="props/aaa.csv"/> <property name="lineMapper" ref="dlmaper"/> </bean> <bean id="dlmaper" class="org.springframework.batch.item.file.mapping.DefaultLineMapper"> <property name="lineTokenizer" ref="lineTokenizer"/> <property name="fieldSetMapper" > <bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper"> <property name="prototypeBeanName" value="student"/> </bean> </property> </bean> <bean id="student" class="com.jd.finance.platform.accounts.domain.vo.Student"/> <bean id="lineTokenizer" class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer" > <property name="delimiter" value=","/> <property name="names" > <list> <value>id</value> <value>name</value> <value>age</value> <value>score</value> </list> </property> </bean> <bean id="csvItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step"> <property name="resource" value="props/bbb.csv"/> <property name="lineAggregator"> <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator"> <property name="delimiter" value=","/> <property name="fieldExtractor"> <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor"> <property name="names" value="name,age,scope"/> </bean> </property> </bean> </property> </bean></beans>
二、执行Action类
@Controller@RequestMapping("/service")public class OperateAnalyzeServiceAction { private static final Logger log = LoggerFactory.getLogger(OperateAnalyzeServiceAction.class); @Autowired private Job job; @Autowired private SimpleJobLauncher jobLauncher; @RequestMapping(value = "/doExecute", method = RequestMethod.GET) public void doExecute() { try { JobExecution result = jobLauncher.run(job, new JobParameters()); /* 处理结束,控制台打印处理结果 */ System.out.println(result.toString()); } catch (Exception e) { e.printStackTrace(); } }}
public class Student { private String id; private String name; private String age; private String scope; public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getScope() { return scope; } public void setScope(String scope) { this.scope = scope; }}
<dependency> <groupId>org.springframework.batch</groupId> <artifactId>spring-batch-core</artifactId> <version>2.2.3.RELEASE</version></dependency><dependency> <groupId>org.springframework.batch</groupId> <artifactId>spring-batch-infrastructure</artifactId> <version>2.2.3.RELEASE</version></dependency><dependency> <groupId>org.springframework.batch</groupId> <artifactId>spring-batch-test</artifactId> <version>2.2.3.RELEASE</version> <scope>test</scope></dependency>
- Spring Batch实例详解
- spring batch入门实例
- Spring batch 实例
- spring batch 实例
- Spring Batch 详解
- Spring Batch实例(HelloWorld)
- Spring Batch(4): Job详解
- Spring Batch(5): Step详解
- Spring Batch(5): Step详解
- Spring Batch(5): Step详解
- spring boot + spring batch+ quartz实例
- spring batch
- Spring batch
- Spring Batch
- Spring Batch
- spring-batch
- Spring batch
- Spring Batch
- 每日一记-Mybatis动态语句
- 缓存淘汰算法--LFU算法
- eclipse安装pydev
- 缓存淘汰算法--LRU算法
- 计算机视觉的专家和网站
- Spring Batch实例详解
- 设计模式之适配器模式(Adapter)C++实现
- HWND转Cwnd*
- 【转】面向程序员的数据库访问性能优化法则
- hadoop1.2.1+hbase集群详解
- 【转】Hbase性能优化四个要点
- 杭电-1059 Dividing(多重背包)
- JAVA并发类名图
- 判断是否为丑数(Ugly Number)(leetcode-263)