`
mr_louxi
  • 浏览: 1150 次
社区版块
存档分类
最新评论
  • mr_louxi: 正在学习这个   第一次写博文 如果觉得存在问题的  可以一起 ...
    Spring Batch

Spring Batch

 
阅读更多
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());
	}
分享到:
评论
1 楼 mr_louxi 2017-01-18  
正在学习这个   第一次写博文 如果觉得存在问题的  可以一起交流

相关推荐

    SpringBatch+Spring+Mybatis+MySql (spring batch 使用jar)

    Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供...

    Spring Batch in Action英文pdf版

    Spring Batch是一个开源的轻量级、全面的批处理框架,它是为了解决企业应用中的大规模数据处理需求而设计的。Spring Batch in Action是一本专注于Spring Batch框架的书籍,由Arnaud Cogoluègnes、Thierry Templier...

    Spring Boot整合Spring Batch,实现批处理

    在Java开发领域,Spring Boot和Spring Batch的整合是构建高效批处理系统的一种常见方式。Spring Boot以其简洁的配置和快速的启动能力深受开发者喜爱,而Spring Batch作为Spring框架的一部分,专注于批量处理任务,...

    Spring Batch批处理框架

    Spring Batch是一个开源的轻量级批处理框架,它提供了一整套可复用的组件,用于构建健壮且高效的批处理应用程序。由于信息给定的【部分内容】并没有提供实际的技术细节,因此我将基于Spring Batch框架本身,详细介绍...

    quartz整合springbatch动态集群定时实现mysql参考

    在这个“quartz_springbatch_dynamic”项目中,我们将看到如何将这两个强大的工具结合起来,以实现动态集群环境中的定时任务执行,并使用MySQL作为数据存储。 Quartz是一个开源的作业调度框架,允许开发者创建、...

    springbatch 详解PDF附加 全书源码 压缩包

    **Spring Batch 深度解析** Spring Batch 是一个强大的、全面的批处理框架,由 Spring 社区开发,旨在简化企业级应用中的批量数据处理任务。这个框架提供了一种标准的方式来处理大量的数据输入和输出,使得开发者...

    基于Spring Batch的大数据量并行处理

    ### 基于Spring Batch的大数据量并行处理 #### 概述 Spring Batch是一款用于高效处理大量数据的开源框架,特别适用于批处理任务。它由Spring Source与Accenture合作开发,结合了双方在批处理架构和技术上的优势,...

    The Definitive Guide to Spring Batch, 2nd Edition.epub

    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批量处理数据demo

    SpringBoot和SpringBatch是两个非常重要的Java开发框架,它们在企业级应用开发中扮演着重要角色。SpringBoot简化了Spring应用程序的配置和启动过程,而SpringBatch则专注于批处理任务,提供了一套全面且可扩展的解决...

    SpringBatch-DataMigration SpringBatch数据迁移项目

    mybatis、springBatch、mysql、quartz、spring、springMVC 部署说明: 本项目为两个数据库,由一个数据库的表向另外一个数据库的表做数据迁移,其中数据库脚本在:/src/main/resources/sql/下面(其中data_rep中的表...

    spring Batch实现数据库大数据量读写

    Spring Batch 是一个强大的、可扩展的Java框架,专门用于处理批量数据处理任务,包括大量数据库数据的读取、处理和写入。它被设计为在企业级应用中处理大规模、高吞吐量的工作负载。本篇文章将深入探讨如何利用...

    Spring batch in action

    Spring Batch是一本介绍如何使用Spring Batch框架来构建批处理应用程序的专业书籍。在软件行业中,随着各种趋势的发展,例如基于Web的应用、面向服务的架构(SOA)以及事件驱动的应用,批处理应用程序虽然存在已久,...

    Spring Batch读取txt文件并写入数据库的方法教程

    Spring Batch 是一个强大的批处理框架,它为处理大量数据提供了灵活和可扩展的解决方案。在本教程中,我们将探讨如何使用 Spring Batch 读取文本(txt)文件,并将读取到的数据处理后写入数据库。 首先,我们需要...

    [原创]Spring Batch 示例程序

    Spring Batch 是一个强大的Java框架,专门用于处理批量数据处理任务。在给定的"Spring Batch 示例程序"中,我们可以深入探讨这个框架的核心概念和在实际应用中的使用方式。该示例程序采用的是Spring 3作为基础框架,...

    Spring Batch 参考文档中文版

    Spring Batch是一个轻量级、全面的批处理框架,用于开发生产级的批处理应用,尤其是那些需要高效、可靠地处理大量数据的应用。Spring Batch提供了可重复使用的功能,这些功能在处理大量记录时非常重要,例如事务管理...

    Spring Batch API(Spring Batch 开发文档).CHM

    Spring Batch API(Spring Batch 开发文档).CHM。 官网 Spring Batch API,Spring Batch 开发文档

    Spring Batch In Action

    ### Spring Batch In Action #### 知识点一:Spring Batch 的简介 - **Spring Batch** 是一个基于 Java 的强大框架,专门设计用于处理大规模数据批处理任务。 - 它为开发人员提供了一套完整的工具来构建高效、可靠...

    Spring Batch学习demo项目源码

    Spring Batch 是一个强大的、全面的批处理框架,用于处理大量数据。它被设计为高度可配置,能够处理各种批量处理任务,包括数据导入导出、日志分析、报表生成等。这个"Spring Batch学习demo项目源码"是针对Spring ...

    SpringBatch学习入门

    SpringBatch 是一个强大的Java批处理框架,由Spring社区开发并维护,主要用于处理大量数据的后台操作,如批量导入导出、日志分析、定时任务等。在本文中,我们将深入探讨SpringBatch的学习入门,以及如何在IDEA环境...

    pro spring batch 源码

    Spring Batch 是一个强大的开源批处理框架,用于处理大量数据,尤其在企业级应用中广泛应用。它为批量处理任务提供了全面的解决方案,包括读取、处理和写入数据,以及事务管理、错误处理和作业调度。"Pro Spring ...

Global site tag (gtag.js) - Google Analytics