Spring Batch

时光毁灭记忆、已成空白 提交于 2020-02-27 12:17:09

启动方式

主要是通过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中终止任务

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!