zoukankan      html  css  js  c++  java
  • Spring Batch中job的启动,停止,放弃操作

    1,启动一个job

      运行一个批处理任务至少有两点要求:一个 JobLauncher 和一个用来运行的 job 。它们都包含了相同或是不同的 context 。举例来说,从命令行来启动job,会为每一个job初始化一个JVM,因此每个job会有一个自己的 JobLauncher;从web容器的HttpRequest来启动job,一般只是用一个 JobLauncher 来异步启动job,http请求会调用这个 JobLauncher 来启动它们需要的job。通过web启动job的例子:

    @Controller
    public class JobLauncherController {
        @Autowired
        JobLauncher jobLauncher;
        @Autowired
        Job job;
        @RequestMapping("/jobLauncher.html")
        public void handle() throws Exception{
          jobLauncher.run(job, new JobParameters());
        }
    }

    2,停止一个job

      关闭不是立即发生的,因为没有办法将一个任务立刻强制停掉,尤其是当任务进行到开发人员自己的代码段时,框架在此刻是无能为力的,比如某个业务逻辑处理。而一旦控制权还给了框架,它会立刻设置当前 StepExecution 为 BachStatus.STOPPED ,意为停止,然后保存,最后在完成前对JobExecution进行相同的操作。

    Set<Long> executions = jobOperator.getRunningExecutions("sampleJob");
    jobOperator.stop(executions.iterator().next());

    或者在配置文件中实现:

    它能够让job进行短暂的停留,以便操作员有时间进行其他的操作,stop元素必须配置restart属性,当该job重新启动的时候,需要手动触发,执行step2。

    <step id="step1" parent="s1">
        <stop on="COMPLETED" restart="step2"/>
    </step>
    
    <step id="step2" parent="s2"/>

    3,放弃一个job

      一个job的执行过程当执行到FAILED状态之后,如果它是可重启的,它将会被重启。如果任务的执行过程状态是ABANDONED,那么框架就不会重启它。ABANDONED状态也适用于执行步骤,使得它们可以被跳过,即便是在一个可重启的任务执行之中:如果任务执行过程中碰到在上一次执行失败后标记为ABANDONED的步骤,将会跳过该步骤直接到下一步(这是由任务流定义和执行步骤的退出码决定的)。如果当前的系统进程死掉了(“kill -9”或系统错误),job自然也不会运行,但JobRepository是无法侦测到这个错误的,因为进程死掉之前没有对它进行任何通知。你必须手动的告诉它,你知道任务已经失败了还是说考虑放弃这个任务(设置它的状态为FAILED或ABANDONED)-这是业务逻辑层的事情,无法做到自动决策。只有在不可重启的任务中才需要设置为FAILED状态,或者你知道重启后数据还是有效的。Spring Batch Admin中有一系列工具JobService,用以取消正在进行执行的任务。
     
    4,失败一个job
    失败的job是可以重新启动的,因为它的状态是FAILED,如果step2失败,则返回一个EARLY TERMINATION的返回码,step3也就不会执行。否则继续执行step3
    <step id="step1" parent="s1" next="step2">
    
    <step id="step2" parent="s2">
        <fail on="FAILED" exit-code="EARLY TERMINATION"/>
        <next on="*" to="step3"/>
    </step>
    
    <step id="step3" parent="s3">

    5,结束一个job

    已经结束的job是不能重新启动的,因为它的状态是COMPLETED。如果step2失败了,则step3就不执行了,该job也就COMPLETED,结束了。如果step2成功了,则继续往下执行step3。

    <step id="step1" parent="s1" next="step2">
    
    <step id="step2" parent="s2">
        <end on="FAILED"/>
        <next on="*" to="step3"/>
    </step>
    
    <step id="step3" parent="s3">
  • 相关阅读:
    文件上传跨域解决方案-jQuery-File-Upload
    求数列的的增幅,已知起始列和结束列,中间阶梯数
    mud那些坑 find_object问题
    jquery mCustomScrollbar使用
    JS的Date对象
    JS获取当前日期
    Go数组求和
    Go九九乘法表
    Go语言基础之time包
    Go语言基础之流程控制
  • 原文地址:https://www.cnblogs.com/nizuimeiabc1/p/9409492.html
Copyright © 2011-2022 走看看