`
mr_louxi
  • 浏览: 1151 次
社区版块
存档分类
最新评论
  • 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  
正在学习这个   第一次写博文 如果觉得存在问题的  可以一起交流

相关推荐

    采用s函数编写的永磁同步电机矢量控制双闭环PMSM控制模型,利用matlab simulink搭建,可修改参数,增减负载均能恢复参考值正常运行

    采用s函数编写的永磁同步电机矢量控制双闭环PMSM控制模型,利用matlab simulink搭建,可修改参数,增减负载均能恢复参考值正常运行。

    微博热搜数据可视化分析系统技术框架python + flask web + mysql

    ===如资源质量问题,可半价退款,代下全网资源,价格公道==== 微博热搜数据可视化分析系统 技术框架 python + flask web + mysql 角色介绍 管理员 admin 123456 模块分析 可视化模块 趋势模块(折线图) 热搜模块(云词图) 分析模块 情感分析模块 (因为舆情分析包含了情感分析我们为了区分两者的区别在舆情模块中包含了中文分词jiba功能) 影响分析模块 (影响分析我们根据数据库中的数据来分析,主要做两部获取数据库中最大的热度标题,jiba分词获取出现频率最大的热搜,和最小的热搜) 舆情分析模块 (单独的使用snow就行因为舆情分析包含了情感分析) 学院模块 邮箱模块 (在学院模块中如果舆情值低于0.3发送邮箱到指定的邮箱中) 爬虫模块 (页面上有一个爬虫按钮,当用户点击以后它爬出一次热搜的数据并添加到数据库中) 学院模块 (爬虫专门爬虫学校贴吧信息,然后如果舆情值低于多少使用邮箱通知管理员) 密码重置模块 数据库WBAnalysis。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    引体向上和俯卧撑的自动感知计数原理

    引体向上和俯卧撑的自动感知计数原理

    springboot263校园组团平台.zip

    springboot263校园组团平台

    springboot+vue的桂林旅游网站系统-1e9t9f02.zip

    springboot+vue的桂林旅游网站系统_1e9t9f02.zip

    Scrapy是一个用于Python的快速高级网页抓取框架.zip

    python

    springboot239华府便利店信息管理系统.zip

    springboot239华府便利店信息管理系统

    springboot180基于spring boot的医院挂号就诊系统.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    T型逆变器仿真(SPWM)Matlab2021a 加设LCL滤波器,三相负载为纯阻性, 采用SPWM,正弦波作为调制波 逆变器输出线电压为五电平波形,滤波后电压电流为对称三相电

    T型逆变器仿真(SPWM)Matlab2021a 加设LCL滤波器,三相负载为纯阻性, 采用SPWM,正弦波作为调制波。 逆变器输出线电压为五电平波形,滤波后电压电流为对称三相电。

    springboot115城镇保障性住房管理系统.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    springboot298计算机学院校友网.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    Vim pythonmode PyLint绳Pydoc断点从框.zip

    python

    springboot237毕业设计成绩管理系统的设计与实现.zip

    springboot237毕业设计成绩管理系统的设计与实现

    基于Activiti的低代码办公平台设计与开发:实现流程与表单自动化管理

    内容概要:本文介绍了一个基于 Activiti 流程引擎的低代码办公平台的设计与开发。该平台由低代码设计模块和基本信息模块组成,支持线上创建业务对象、表单、数据对象和流程模型等,利用 DDL语言进行数据库操作、Activiti 进行流程管理,前端使用 Bpmn-js 和 Vue.js 开发,表单和数据对象通过 JSON 存储和 Vue 的 Element UI 回显。基本信息模块则涵盖了权限管理和系统管理。测试结果显示平台功能完整,设计简便易用。 适合人群:适合中小型企业的技术人员、管理人员和其他参与办公流程设计与实施的相关人员。 使用场景及目标:平台旨在减少开发投入,降低对专业开发人才的依赖。主要适用于企业内部审批、业务流程自动化等领域,帮助优化业务流程管理,提高办公效率。 其他说明:本文展示了基于Activiti低代码办公平台的具体应用场景和技术实现细节。关键技术点涉及 Activiti 工作流、Vue.js 前端框架和 MySQL 数据库管理系统,为开发类似办公系统提供了有价值的参考和借鉴。

    springboot219基于SpringBoot的网络海鲜市场系统的设计与实现.zip

    springboot219基于SpringBoot的网络海鲜市场系统的设计与实现

    springboot112基于Spring Boot技术的卓越导师双选系统设计与实现.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    自动驾驶车道保持LKA,基于LQR算法,carsim与simulink联合仿真,包括说明书及LQR的推导过程(每一步怎么做的)

    自动驾驶车道保持LKA,基于LQR算法,carsim与simulink联合仿真,包括说明书及LQR的推导过程(每一步怎么做的)

    Python中的概率时间序列建模.zip

    python

    springboot120企业级工位管理系统.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

    BES秃鹰优化算法结合GRU做多特征输入单个因变量输出的拟合预测模型 程序注释详细直接替数据可以用 程序语言为matlab,最低版本要求2020及以上

    BES秃鹰优化算法结合GRU做多特征输入单个因变量输出的拟合预测模型。 程序注释详细直接替数据可以用。 程序语言为matlab,最低版本要求2020及以上。

Global site tag (gtag.js) - Google Analytics