启动方式
主要是通过JobLauncher
来启动一个Job,当JobLaunchar
启动一个Job时,有分成是同步处理还是异常处理。
这个是通过在创建JobLauncher
时有没有给它设置线程池如:
public JobLauncher asyncJobLauncher() throws Exception {
SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
jobLauncher.setJobRepository(this.jobRepository);
jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
jobLauncher.afterPropertiesSet();
return jobLauncher;
}
启动一个Job:
JobLauncher.run(job,jobParameters);
在不同场景下的调用
通过webApp
定时任务
命令行调用
可以在一个单独的jvm中执行批处理作业。通过命令的方式可以手动触发,也可以定义自动任务通过脚本的方式执行批处理作业。Spring Batch 提供的命令执行类:CommandLineJobRunner
, 格式如下:java -classpath "xx" CommandLineJobRunner jobPath <options> jobName(jobParameters)
参数说明:
- jobPath 加载的配置文件,默认从当前classpath 中加载。可以使用前缀来使用如
file:./job.xml
- options
-restart
-stop
-abandon
-next
- jobName 作业的名字,即 beanID
- jobParameters 例:useName(string)=张三 、 createTime(date)=2013-12-02 、 timeout(long)=500 、 money(double)=10.3
调用示例:
java -classpath "./dependency/*;spring-batch-example.jar"
org.springframework.batch.core.launch.support.CommandLineJobRunner
ch02/job/job.xml
billJob
作业退出状态:
状态值 | 说明 |
---|---|
0 | 作业正常完成,complete |
1 | 作业失败,failed |
2 | 作业失败,如没有此作业 |
可以通过实现ExitCodeMapper来自定义退出状态。要记得注册到容器中
Job停止
通过JobOperatro接口
通过接口JobOperator
中的stop方法来实现。 调用后并没有立即停止Job ,而是发了一个终止通知。直到流程进入到Spring Batch 后,才会通知
Set<Long> sunningExecutions = jobOperator.getRunningExecutions(jobName);
jobOperator.stop(sunningExecutions.get(0));
通过JMX方式操作JobOperator 接口
略
注意
通过业务来终止任务时,不要在读,处理,写的业务逻辑中终止任务。保证业务的完整性。可以在拦截器中执行任务终止,例如:ItemReadListener#beforeRead
中终止任务
来源:oschina
链接:https://my.oschina.net/u/2552286/blog/3167037