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线程为啥在被打断之后没有退出,还是在运行状态,这 ...
随机推荐
- ✅问题:Rails.ajax的data不支持{}hash格式。必须使用string。 dataType的格式。
Rails.ajax({ url: url, type: "PATCH", data: {"post":{"category_id":thi ...
- 尺取法——POJ3061
#include <iostream> //nlogn复杂度的写法 #include <cstdio> #include <algorithm> using nam ...
- jackson springboot null节点忽略配置
spring: jackson: date-format: yyyy-MM-dd HH:mm:ss default-property-inclusion: non_null spring.jackso ...
- IOS-多线程(NSOperation)
一.基础用法 // // ViewController.m // IOS_0120_NSOperation // // Created by ma c on 16/1/20. // Copyright ...
- https ddos攻击——由于有了认证和加解密 后果更严重 看绿盟的产品目前对于https的ddos cc攻击需要基于内容做检测
如果web服务器支持HTTPS,那么进行HTTPS洪水攻击是更为有效的一种攻击方式,一方面,在进行HTTPS通信时,web服务器需要消耗更多的资源用来进行认证和加解密,另一方面,一部分的防护设备无法对 ...
- 微任务、宏任务与Event-Loop
首先,JavaScript是一个单线程的脚本语言.所以就是说在一行代码执行的过程中,必然不会存在同时执行的另一行代码,就像使用alert()以后进行疯狂console.log,如果没有关闭弹框,控制台 ...
- 前端 crypto-js aes 加解密
下载:npm install crypto-js --save 需要定义两个方法 ,分别是用于加密和解密,这里我将它放在了 utils 文件夹下,命名为 secret.js ,其具体代码如下: con ...
- Android自定义view控件
转载自: http://blog.163.com/ppy2790@126/blog/static/103242241201382210910473/ 开发自定义控件的步骤: 1.了解View的工作原理 ...
- 斯特灵(Stirling)数
http://zh.wikipedia.org/wiki/%E6%96%AF%E7%89%B9%E7%81%B5%E6%95%B0 第一类:n个元素分成k个非空循环排列(环)的方法总数 递推式:s(n ...
- fullfile
这个我总是忽略,见过也不少了,顺便写写,其实一些命令很方便的. 一个例子: root_dir = '../mcg/pre-trained'; addpath(root_dir); addpath(fu ...