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

Spring批量作业无限循环

江佐
2023-03-14

在产品发布的最后一分钟,我发现Java Spring批处理有一个奇怪的问题。它进入无限循环

这是我的配置:

<batch:job id="dbasJob" restartable="true">       
    <batch:step id="dbasStep" next="webService">         
        <tasklet>             
            <chunk reader="campaignReader" processor="campaignProcessor" writer="campaignWriter" commit-interval="1" 
                skip-limit="50">

                <skippable-exception-classes>
                    <include class="java.lang.Exception" />
                </skippable-exception-classes>

                <listeners>
                    <listener ref="campaignProcessListener" />
                    <listener ref="campaignSkipListener" />
                </listeners>
            </chunk>         
        </tasklet>
        <batch:listeners>
            <batch:listener ref="promotionListener" />
        </batch:listeners>     
    </batch:step>

记录总数为10条。因此,提交是在处理每一条记录之后进行的。我正在将结果写入Writer中的数据库。

我从阅读器中一个接一个地获取项目,处理并写入数据库。

public Campaign read()
{   
    return campaignList.isEmpty() ? null : campaignList.remove(0);
}

public Campaign process(Campaign campaign) throws UnexpectedInputException, ParseException, Exception {

    try 

public void write(List<? extends Campaign> campaignList) throws Exception 
{//...Writing to DB...

它一直在运行,并将数据无限地插入表中。

观察结果是:提交间隔

如果有人提出一些解决方案/解决方法,在因为这个问题而举行生产发布时,这将对我有最大的帮助。

多谢了。

共有1个答案

凤晨朗
2023-03-14

关于这个问题有一个公开的问题

 类似资料:
  • 我正在做简单的Spring批量工作。当我启动作业时,它在无限循环中运行。它不会停止。根据我的时间表,它应该每10秒运行一次。但当工作开始时,它不会停止。它只是分别从读卡器、处理器和写入器打印系统输出。我正在为读者、处理者和作者创造工作机会。我正在按注释进行所有配置。不是通过xml。 下面是批处理配置 PersonReader。JAVA 人Writer.java 个人处理器。JAVA

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

  • 我的spring批处理应用程序运行在连接到MySQL数据库(单实例)的PCF平台上,只有一个实例启动时运行良好

  • 我们当前的代码库具有以下重要特征: 一个代码库-但是很多批处理(我们在批处理之间重用代码) 目前,我们在代码库中有多个main()方法,并且只有不同的shell脚本来调用正确的main类。 我希望在Spring Batch中解决以下问题: null 提前谢了。

  • 我很难找到这个问题的正确答案。当使用Spring批处理框架时,是否可以尝试在一个通用作业中解决所有的批处理?

  • 我正在为我们的文件上传过程执行一个spring批处理工作。我的要求是读取平面文件,应用业务逻辑,然后将其存储在DB中,然后发布一个Kafka消息。 我有一个基于块的步骤,它使用自定义的读取器、处理器和写入器。这个过程工作得很好,但是处理一个大文件需要很多时间。 处理一个有60k条记录的文件需要15分钟。我需要减少到5分钟以下,因为我们将消耗比这更大的文件。 根据https://docs.sprin