当前位置: 首页 > 知识库问答 >
问题:

Spring批次如何停运

南宫保臣
2023-03-14

按照标题,我有一个使用spring Batch在后端运行的服务。
我的服务:

@Service
publlic class TestBatch {
public void testDelay(String jobID) {
        // TODO Auto-generated method stub
        try {
            for(int i=0; i< 1000; i++) {
                Thread.sleep(1000);
                System.out.println(jobID + " is running");
            }
           
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
public class TestTasklet implement Tasklet {

@Resource
    private TestBatch testBatch ;

    @Override
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {        
        testBatch.testDelay("Test01"); // Param to show in cololog
        return RepeatStatus.FINISHED;
    }
}
@Service
public class JobService {

    @Autowired
    private SimpleJobOperator simpleJobOperator;

    @Autowired
    private JobExplorer jobs;

    public void stopJob(String jobid) {
        simpleJobOperator.stop(jobid);// Using job operator

        JobExecution jobExecution = jobs.getJobExecution(jobid); // Using job execution
        jobExecution.stop();
    }
}

作业已停止,但控制台中仍输出文本:

Test01 is running
Test01 is running
Test01 is running
...

我不知道如何在作业停止时停止testbatch-methodtestdelay()。我怎么做?

共有1个答案

潘志国
2023-03-14

您需要使用StoppableTasklet,而不是tasklet。当通过JobOperator请求停止作业时,Spring Batch将调用StoppableTasklet#stop

但是,确保代码正确停止取决于您,以下是Javadoc的摘录:

It is up to each implementation as to how the stop will behave.
The only guarantee provided by the framework is that a call to JobOperator.stop(long)
will attempt to call the stop method on any currently running StoppableTasklet.
 类似资料:
  • 我们正在从Oracle DB迁移到Azure SQL Server,用于我们的Spring批处理应用程序。 我断断续续地得到以下错误 错误:01.03.2022:1458(40.269)[]main]命令行JobRunner:作业因错误而终止:创建名为“dateStoreList”的bean时出错:设置bean属性“jobRepository”时无法解析对bean“jobRepository”的引

  • 你好 我是Spring Batch世界的新手,最后几天我花时间观看Michael Minella的YouTube视频,阅读一些文档并成功运行我在互联网上找到的一些演示项目。我认为Spring Batch是我们需求的热门候选者。但这是我们的故事。 我在一家公司工作,该公司在十多年前为他们的业务部门开发了自己的调度和批处理框架。该框架能够运行数据库存储程序、数据库函数和动态SQL。不用说,维护它非常具

  • 我想知道如何将spring反应应用于spring批次。我该怎么做。为什么我们要将spring Responsive应用于spring security?为什么我可以申请spring security,但我不能申请spring batch

  • 我怎样才能停止一个工作在Spring批次?我尝试使用下面的代码来使用这个方法: 我尝试也完成了,失败了,但这个方法不工作,作业继续执行。有解决办法吗?

  • 我需要根据工作步骤1中的某些条件来决定下一步调用哪个步骤。 请注意:在步骤1中,我使用的是纯tasklet方法。例子: 请帮助,我如何在示例tasklet中放入一些代码或进行一些配置以决定调用的下一步? 我已经调查过https://docs.spring.io/spring-batch/reference/html/configureStep.html

  • 目标:我正在使用spring batch进行数据处理,我希望有一个停止/恢复(在它停止的地方)的选项。 问题:我能够向正在运行的作业发送停止信号,并且它成功地被停止。但是当我试图发送启动信号到同一作业时,它创建了一个新的作业实例,并作为一个新的作业开始。 我的问题是如何在spring Batch中为停止的工作实现简历功能。