Spring Batch 是什么?
是一个基于Spring和pojo的企业级批处理框架, 所谓企业批处理就是指在企业级应用中,不需要人工干预,定期读取数据,进行相应的业务处理之后,再进行归档的这类操作。
Spring Batch 能干什么?
目前只是用spring-batch来跑批(不需要人工干预,只需要定期读入大批量数据,然后完成相应业务处理并进行归档)
Spring Batch 学习前理解:
Spring Batch 很大程度上是对一个任务进行代码结构上的解耦,把一个完成的java程序(task)拆分成3部分:读取数据(Reader)--处理数据(Processor)--写数据(Write) 这3步组成一个完整的任务单元 称为Step ,而一个完整的java程序程序(task)可能是由一个 或者多个Step组成
Spring Batch 是如何干活的呢?
所有写好的job 会存储在JobLauncher 这个仓库中, job中 真正干事的是step 想让step干活 你就需要给step一些工具 itemReader,ItemProcessor,itemWriter就是它需要的工具,这些工具可以是你自己提供,以可以用spring batch现成的。完了之后 再通过JobLauncher去运行你需要的job.
Spring Batch demo:(项目基于spring-boot,和Maven)
1. 只介绍项目是基于Maven 的需要加入 springBatch相关的依赖包(pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
2.下面介绍主要是基于xml配置job的形式,所以需要在 springBoot 的application.properties文件中加入 job任务解析路径
# spring batch
spring.batch.job.enabled=false
spring.batch.job.names=job
3.配置一个简单的job(test-job.xml由于上一步中给定了 job的路径 所以该文件需要创建在job文件夹下),这个job的xml里面需要注意的是 在用sql 查询的时候 需要注入数据源
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<job id="T-job" xmlns="http://www.springframework.org/schema/batch">
<step id="step1" next="step2">
<tasklet >
<chunk commit-interval="5" reader="T-itemReader" processor="T-itemProcessor" writer="T-itemWriter" />
</tasklet>
</step>
<step id="step2">
<tasklet>
<chunk commit-interval="5" reader="T-itemReader" processor="T-itemProcessor" writer="T-itemWriter" />
</tasklet>
</step>
</job>
<bean id="T-itemReader" class="org.springframework.batch.item.database.JdbcCursorItemReader">
<property name="dataSource" ref="dataSource" />
<property name="rowMapper" ref="studentMapper"/>
<property name="sql">
<value>
<![CDATA[
select * from TEST_STU
]]>
</value>
</property>
</bean>
<bean id="studentMapper" class="com.coshine.unifiedpay.test.StudentRowMapper">
<property name="student" value="com.coshine.unifiedpay.test.Student"/>
</bean>
<bean id="T-itemProcessor" class="com.coshine.unifiedpay.test.TestProcessor" />
<bean id="T-itemWriter" class="com.coshine.unifiedpay.test.TestWriter" >
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
</beans>
4.上面用的工具(ItemProcessor,itemWriter 都是手动创建的 其中JdbcCursorItemReader 是 springbatch自己提供)StudentRowMapper.java
package com.coshine.unifiedpay.test;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import org.springframework.jdbc.core.RowMapper;
public class StudentRowMapper implements RowMapper<Map<String,Object>> {
private Student student;
@Override
public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
// TODO Auto-generated method stub
Map<String,Object> map = new HashMap<String,Object>();
student.setStuid(rs.getString("STUID"));
student.setStuname(rs.getString("STUNAME"));
student.setStuage(rs.getString("STUAGE"));
student.setChecknum(rs.getString("CHECKNUM"));
map.put("stuObj", student);
return map;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}
5.TestProcessor .java
package com.coshine.unifiedpay.test;
import org.springframework.batch.item.ItemProcessor;
public class TestProcessor implements ItemProcessor<String, Object>{
@Override
public Object process(String str) throws Exception {
System.err.println("-------------进入TestProcessor------------");
return new Object();
}
}
6.TestWriter.java 这个里面用到了 jdbcTemplate 但由于该类没有通过注解加入到容器 不能直接通过注解将jdbcTemplate对象注入到该类中 所以引用了 spring中注入bean 的方式 在TestWriter这个bean 里面添加jdbcTemplate 属性 再通过set方法注入进来
package com.coshine.unifiedpay.test;
import java.util.List;
import org.springframework.batch.item.ItemWriter;
import org.springframework.jdbc.core.JdbcTemplate;
public class TestWriter implements ItemWriter<Object>{
private JdbcTemplate jdbcTemplate;
@Override
public void write(List<? extends Object> list) throws Exception {
System.err.println("------------进入TestWrite--------------"+list);
}
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}
7.运行job
那么我们如何去运行一个Spring batch 任务呢?
1.SpringBatch 下的所有任务 都是存储在JobLauncher 中的 那么运行一个job 就需要通过JobLauncher去调用对应的job
2.对于基于注解的 spring boot 项目 我们只需要 注入
@Autowired
JobLauncher jobLauncher;
3.参考
@Controller
@RequestMapping("/test")
public class TestController {
@Autowired
JobLauncher jobLauncher;
@Autowired
ListableJobLocator jobLocator_;
@RequestMapping("/jobs")
@ResponseBody
public void TestJob() throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException, NoSuchJobException{
JobParameters jp = new JobParameters();
JobParameters jp2 =new JobParametersBuilder().addString("date", System.currentTimeMillis() + "").toJobParameters();
JobExecution execution = jobLauncher.run(jobLocator_.getJob("T-job"), jp2);
System.out.println("Exit Status : " + execution.getStatus());
}
分享到:
相关推荐
Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供...
Spring Batch是一个开源的轻量级、全面的批处理框架,它是为了解决企业应用中的大规模数据处理需求而设计的。Spring Batch in Action是一本专注于Spring Batch框架的书籍,由Arnaud Cogoluègnes、Thierry Templier...
在Java开发领域,Spring Boot和Spring Batch的整合是构建高效批处理系统的一种常见方式。Spring Boot以其简洁的配置和快速的启动能力深受开发者喜爱,而Spring Batch作为Spring框架的一部分,专注于批量处理任务,...
Spring Batch是一个开源的轻量级批处理框架,它提供了一整套可复用的组件,用于构建健壮且高效的批处理应用程序。由于信息给定的【部分内容】并没有提供实际的技术细节,因此我将基于Spring Batch框架本身,详细介绍...
在这个“quartz_springbatch_dynamic”项目中,我们将看到如何将这两个强大的工具结合起来,以实现动态集群环境中的定时任务执行,并使用MySQL作为数据存储。 Quartz是一个开源的作业调度框架,允许开发者创建、...
**Spring Batch 深度解析** Spring Batch 是一个强大的、全面的批处理框架,由 Spring 社区开发,旨在简化企业级应用中的批量数据处理任务。这个框架提供了一种标准的方式来处理大量的数据输入和输出,使得开发者...
### 基于Spring Batch的大数据量并行处理 #### 概述 Spring Batch是一款用于高效处理大量数据的开源框架,特别适用于批处理任务。它由Spring Source与Accenture合作开发,结合了双方在批处理架构和技术上的优势,...
Work with all aspects of batch processing in a modern Java environment using a selection of Spring frameworks. This book provides up-to-date examples using the latest configuration techniques based on...
SpringBoot和SpringBatch是两个非常重要的Java开发框架,它们在企业级应用开发中扮演着重要角色。SpringBoot简化了Spring应用程序的配置和启动过程,而SpringBatch则专注于批处理任务,提供了一套全面且可扩展的解决...
mybatis、springBatch、mysql、quartz、spring、springMVC 部署说明: 本项目为两个数据库,由一个数据库的表向另外一个数据库的表做数据迁移,其中数据库脚本在:/src/main/resources/sql/下面(其中data_rep中的表...
Spring Batch 是一个强大的、可扩展的Java框架,专门用于处理批量数据处理任务,包括大量数据库数据的读取、处理和写入。它被设计为在企业级应用中处理大规模、高吞吐量的工作负载。本篇文章将深入探讨如何利用...
Spring Batch是一本介绍如何使用Spring Batch框架来构建批处理应用程序的专业书籍。在软件行业中,随着各种趋势的发展,例如基于Web的应用、面向服务的架构(SOA)以及事件驱动的应用,批处理应用程序虽然存在已久,...
Spring Batch 是一个强大的批处理框架,它为处理大量数据提供了灵活和可扩展的解决方案。在本教程中,我们将探讨如何使用 Spring Batch 读取文本(txt)文件,并将读取到的数据处理后写入数据库。 首先,我们需要...
Spring Batch 是一个强大的Java框架,专门用于处理批量数据处理任务。在给定的"Spring Batch 示例程序"中,我们可以深入探讨这个框架的核心概念和在实际应用中的使用方式。该示例程序采用的是Spring 3作为基础框架,...
Spring Batch是一个轻量级、全面的批处理框架,用于开发生产级的批处理应用,尤其是那些需要高效、可靠地处理大量数据的应用。Spring Batch提供了可重复使用的功能,这些功能在处理大量记录时非常重要,例如事务管理...
Spring Batch API(Spring Batch 开发文档).CHM。 官网 Spring Batch API,Spring Batch 开发文档
### Spring Batch In Action #### 知识点一:Spring Batch 的简介 - **Spring Batch** 是一个基于 Java 的强大框架,专门设计用于处理大规模数据批处理任务。 - 它为开发人员提供了一套完整的工具来构建高效、可靠...
Spring Batch 是一个强大的、全面的批处理框架,用于处理大量数据。它被设计为高度可配置,能够处理各种批量处理任务,包括数据导入导出、日志分析、报表生成等。这个"Spring Batch学习demo项目源码"是针对Spring ...
SpringBatch 是一个强大的Java批处理框架,由Spring社区开发并维护,主要用于处理大量数据的后台操作,如批量导入导出、日志分析、定时任务等。在本文中,我们将深入探讨SpringBatch的学习入门,以及如何在IDEA环境...
Spring Batch 是一个强大的开源批处理框架,用于处理大量数据,尤其在企业级应用中广泛应用。它为批量处理任务提供了全面的解决方案,包括读取、处理和写入数据,以及事务管理、错误处理和作业调度。"Pro Spring ...