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线程为啥在被打断之后没有退出,还是在运行状态,这 ...
随机推荐
- 【转】梯度下降算法以及其Python实现
一.梯度下降算法理论知识 我们给出一组房子面积,卧室数目以及对应房价数据,如何从数据中找到房价y与面积x1和卧室数目x2的关系? 为了实现监督学习,我们选择采用自变量x1.x2的线性函数来评估因变 ...
- $ocLazyLoad
博客:http://zhidao.baidu.com/link?url=1eODexxXPsl2gy4UsRnfIqPJnzFrzFk2JJad-cjWDiyCKkb4qxS8scvxoMRqM0Fw ...
- javascript遍历json对象数据的方法
JSON中,有两种结构:对象和数组,对象是没有length这个属性,而数组结构是有的,下面分别说下这两种结构之间的区别和遍历方式. 1.对象 一个对象以“{”开始,“}”结束.每个“key”后跟一“: ...
- android--------Universal-Image-Loader图片加载框架和结合LruCache缓存图片
本博客包含包含Android-Universal-Image-Loader 网络图片加载框架实现图片加载和结合universal-image-loader与LruCache来自定义缓存图片,可以设置缓 ...
- Android之微信开放平台实现分享(分享好友和朋友圈)
开发中分享操作往往经常遇到,而且还是一些比较大型一定的平台,如微信,QQ,微博等.写这篇博客主要是把微信的的分享和相关操作表达一下,分享可以包含:文字,视频,音乐,图片等分享. 分享可以有 分享给好友 ...
- ultraedit开发使用技巧
抛开Mybatis和Hibernate这些dao框架,如果维护老项目时或者不得不用sql拼接时,一个几百行的sql光是去掉navicat中查询的注释或者在sql前后加上双引号就已经很费劲,影响开发效率 ...
- 【Demo】CSS3 动画文字
效果图: 完整代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...
- IOS-网络(ASIHTTPRequest的使用简介)
使用iOS SDK中的HTTP网络请求API,相当的复杂,调用很繁琐,ASIHTTPRequest就是一个对CFNetwork API进行了封装,并且使用起来非常简单的一套API,用Objective ...
- Java解析Json数据的两种方式
JSON数据解析的有点在于他的体积小,在网络上传输的时候可以更省流量,所以使用越来越广泛,下面介绍使用JsonObject和JsonArray的两种方式解析Json数据. 使用以上两种方式解析json ...
- New Concept English Two 14 34
recently busy a lot ,just practices every morning. $课文32 购物变得很方便 324. People are not so hone ...