springBatch学习 batch的使用方式(5)
首先讲一下batch框架提供的一组job执行的api 如下图

说明:

应用场景 包含三种 标准的web ,定时任务调度,命令行
1.命令行
通过命令行在单独的jvm中调用 进行批处理作业 springbatch提供了命令行执行类 commandLineJobRunner

1.将项目构件为jar
2. 进入jar项目目录 执行jar包

注意: 默认从classpath路径开始加载配置文件
-restart 根据job名称重启最后一次失败作业
-stop 根据job名称停止正在执行的作业
-abandon 废弃正在执行的作业
-next 根据jobparameters去执行下一次作业
如果需要自定义任务退出状态 实现exicodetmapper 然后配置即可
2.与定时任务集成
结合spring schdule 可以很简单的实现定时集成
1.定义一个schdule 提供执行定时任务的线程
2.定义所需要的方法和调度周期
<task:scheduler id="scheduler" pool-size="" /> 定义线程池大小
<!-- 每一秒钟,执行对象schedulerLauncher的launch方法一次 -->
<task:scheduled-tasks scheduler="scheduler">
<task:scheduled ref="schedulerLauncher" method="launch" fixed-rate="" /> fixrate代表一秒执行一次 在schduleLaucher中的lauch方法
</task:scheduled-tasks>
<bean:bean id="schedulerLauncher"
class="com.juxtapose.example.ch04.scheduler.SchedulerLauncher">
<bean:property name="job" ref="helloworldJob" />
<bean:property name="jobLauncher" ref="jobLauncher" />
</bean:bean>
省略其余配置
3.与web集成
spring barch 有spring基础开发完成 内嵌在spring框架中提供http协议远成调用或者web系统定时调用
如下图:

//定义一个controller提供调用
import java.util.Enumeration; import javax.servlet.http.HttpServletRequest; import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.configuration.JobRegistry;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam; @Controller
public class JobLauncherController { private static final String JOB_NAME = "jobName";
private JobLauncher jobLauncher;
private JobRegistry jobRegistry; public JobLauncherController(JobLauncher jobLauncher, JobRegistry jobRegistry) {
this.jobLauncher = jobLauncher;
this.jobRegistry = jobRegistry;
} @RequestMapping(value="executeJob",method=RequestMethod.GET)
public void launch(@RequestParam String jobName,HttpServletRequest request)
throws Exception {
JobParameters jobParameters = bulidParameters(request);
jobLauncher.run( jobRegistry.getJob(jobName),jobParameters);
} private JobParameters bulidParameters(HttpServletRequest request) {
JobParametersBuilder builder = new JobParametersBuilder();
@SuppressWarnings("unchecked")
Enumeration<String> paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()) {
String paramName = paramNames.nextElement();
if(!JOB_NAME.equals(paramName)) {
builder.addString(paramName,request.getParameter(paramName));
}
}
return builder.toJobParameters();
}
}
配置文件
<!-- 作业仓库 -->
<job-repository id="jobRepository" data-source="dataSource"
transaction-manager="transactionManager" isolation-level-for-create="SERIALIZABLE"
table-prefix="BATCH_" max-varchar-length=""
/> <!-- 作业调度器 -->
<bean:bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<bean:property name="jobRepository" ref="jobRepository"/>
</bean:bean>
通过这个类 可以在job被加载后加入注册。然后被获取
<bean:bean class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor">
<bean:property name="jobRegistry" ref="jobRegistry" />
</bean:bean> <bean:bean id="jobRegistry" job注册
class="org.springframework.batch.core.configuration.support.MapJobRegistry" /> <!-- 事务管理器 -->
<bean:bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<bean:property name="dataSource" ref="dataSource" />
</bean:bean> <!-- 数据源 -->
<bean:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<bean:property name="driverClassName">
<bean:value>com.mysql.jdbc.Driver</bean:value>
</bean:property>
<bean:property name="url">
<bean:value>jdbc:mysql://127.0.0.1:3306/test1289</bean:value>
</bean:property>
<bean:property name="username" value="root"></bean:property>
<bean:property name="password" value=""></bean:property>
</bean:bean>
</bean:beans> 构造controlller
<bean class="com.juxtapose.example.ch04.web.JobLauncherController">
<constructor-arg ref="jobLauncher" />
<constructor-arg ref="jobRegistry" />
</bean>
</beans>
别的配置 如web.xml之类的省略。
启动web项目 就可以通过url访问了
基本就以上三种方法
springBatch学习 batch的使用方式(5)的更多相关文章
- [转]Windows网络编程学习-面向连接的编程方式
直接附上原文链接:windows 网络编程学习-面向连接的编程方式
- JavaWeb学习——页面跳转方式
JavaWeb学习——页面跳转方式 摘要:本文主要学习了请求转发和响应重定向,以及两者之间的区别. 请求转发 相关方法 使用HttpServletRequest对象的 getRequestDispat ...
- 阿里云Web应用防火墙采用规则引擎、语义分析和深度学习引擎相结合的方式防护Web攻击
深度学习引擎最佳实践 {#concept_1113021 .concept} 阿里云Web应用防火墙采用多种Web攻击检测引擎组合的方式为您的网站提供全面防护.Web应用防火墙采用规则引擎.语义分析和 ...
- mybatis源码学习--spring+mybatis注解方式为什么mybatis的dao接口不需要实现类
相信大家在刚开始学习mybatis注解方式,或者spring+mybatis注解方式的时候,一定会有一个疑问,为什么mybatis的dao接口只需要一个接口,不需要实现类,就可以正常使用,笔者最开始的 ...
- Tornado学习笔记(三) 请求方式/状态码
本章我们来学习 Tornado 支持的请求方式 请求方式 Tornado支持任何合法的HTTP请求(GET.POST.PUT.DELETE.HEAD.OPTIONS).你可以非常容易地定义上述任一种方 ...
- Android学习笔记-listview实现方式之BaseAdapter
listview是Android开发中最为常用的组件,这里我们就学习一下用BaseAdapter的方式实现listview, 主布局activity_main.xml是这样的: <LinearL ...
- 树莓派学习笔记—— 源码方式安装opencv
0.前言 本文介绍怎样在树莓派中通过编译源码的方式安装opencv,并通过一个简单的样例说明怎样使用opencv. 很多其它内容请參考--[树莓派学习笔记--索引博文] 1.下载若干依 ...
- Netty学习——Google Protobuf使用方式分析和环境搭建
Google Protobuf使用方式分析 在RPC框架中,Google Protobuf是很常用的一个库,和Apache Thrift 是同款的用于进行序列化的第三方库.原理都是大同小异,无非就是使 ...
- java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期
Interrupt学习: 在jdk中关于interrupt相关方法有三个,如下: 关于上面的疑问会在稍后进行阐述滴,下面看代码: 编译运行: 应该说是t线程为啥在被打断之后没有退出,还是在运行状态,这 ...
随机推荐
- a href 属性
两种用法: 页面跳转时使用 url (部分浏览器会阻止新窗口弹出页面),其他情况一律遵循 ‘结构样式行为分离’ 1. url href="#" 文档顶部 ...
- POJ 2411 状压DP经典
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 16771 Accepted: 968 ...
- Leetcode 51
//看了一次解析后,一次AC,用一个pos记录行列.class Solution { public: vector<vector<string>> solveNQueens(i ...
- BZOJ1555 KD之死
如果没有必选的限制条件,就是水题了... 只要按照w + t排序就可以了,然后搞个堆来维护 于是有了限制条件,还是水题... 到了必选的时候强制选上,不加入堆中即可. /*************** ...
- 09_Git patch(补丁)操作
Git打补丁,补丁操作一般在多人开发时才会用到,单人本地开发一般用不到,没必要. 应用场景举例: 我把我的更改打成一个补丁发给你,你来合并到你的代码中 或者,在家里电脑开发提交后,打一个补丁,拿到 ...
- [Java] Eclipse下导入外部jar包的3种方式
我们在用Eclipse开发程序的时候,经常要用到第三方jar包.引入jar包不是一个小问题,由于jar包位置不清楚,而浪费时间.下面配图说明3种Eclipse引入jar包的方式. 1.最常用的普通 ...
- 重磅教程!帮你全面彻底搞定Material design的学习笔记
http://www.uisdc.com/comprehensive-material-design-note
- Java实现冒泡排序,选择排序,插入排序
冒泡排序: 思想: 冒泡排序重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说排序完成 特点:比较稳定,排序数较小是 ...
- vue.js 源代码学习笔记 ----- decoder
/* @flow */ let decoder export function decode (html: string): string { decoder = decoder || documen ...
- Chrome浏览器中使用 iframe 嵌入网页导致视频不能全屏的问题解决方法
今天无意中测试了下在 iframe 中嵌入视频, 发现全屏按钮在 Chrome 浏览器中居然无效, 试了好几个视频网站的视频都不能全屏, 但在其他浏览器中似乎都很正常, 应该是 Chrome 60 新 ...