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

主线程执行完成后Spring批处理线程不返回

方鸿振
2023-03-14

我是spring batch的新手。我已经使用多个线程从spring创建并成功执行了作业,它工作得很好,只是当程序执行完成时,程序流不会结束/停止。i、 即使main方法的最后一条语句被执行,程序也不会退出。我不确定它是否一直在等待线程完成,或者是什么。有人能给我一些建议吗?“下面是我的作业配置文件

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
            <property name="corePoolSize" value="5" />
            <property name="maxPoolSize" value="5" />
</bean>

<batch:job id="helloWorldJob" job-repository="jobRepository">
       <batch:step id="step0" next="step1">
                <batch:tasklet ref="hello" transaction-manager="transactionManager" task-executor="taskExecutor" />
       </batch:step>        
       <batch:step id="step1">
                <batch:tasklet ref="world" transaction-manager="transactionManager" />
       </batch:step>
</batch:job>  

下面是启动器代码

public static void main(String args[]) {
        try {
            new ClassPathXmlApplicationContext("simpleJob.xml");

            JobParametersBuilder builder = new JobParametersBuilder();
            builder.addString("Date", "12/02/2011");
            jobLauncher.run(job, builder.toJobParameters());

            JobExecution jobExecution = jobRepository.getLastJobExecution(job.getName(), builder.toJobParameters());

            System.out.println("\n\n"+jobExecution.toString());
            Thread.sleep(5000);
            System.out.println("End of execution ");
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

如上所述,代码在5个不同的线程中为任务“hello”运行,为任务“world”运行一次,尽管它不会使主程序的执行停止,即使在主方法“执行结束”的最后一行被执行之后也是如此。我们将非常感谢任何链接白皮书。提前谢谢Samir

共有1个答案

宦琪
2023-03-14

您的线程池没有被关闭。可能最好的方法是在您的应用程序上下文中调用关闭()(为了安全起见,在最后一个块中)。

 类似资料:
  • null 我更新了我的步骤并添加了一个ThreadPoolTaskExecutor,如下所示 在此之后,我的处理器将被多个线程调用,但使用相同的源数据。我还有什么需要做的吗?

  • 问题内容: 主线程将在子线程完成执行之前退出? 我读了两篇文章 http://www.cs.mtu.edu/~shene/NSF-3/e-Book/FUNDAMENTALS/thread- management.html 在以上文章的“线程终止”段中,它用红色表示“如果父线程终止,则其所有子线程也终止。” http://www.roseindia.net/java/thread/overview-

  • 我正在尝试使用多个处理器类在处理器步骤中处理记录。这些类可以并行工作。目前我已经编写了一个多线程步骤,其中我 设置处理器类的输入和输出行 提交给遗嘱执行人服务 获取所有未来对象并收集最终输出

  • 我确信这两个列表都不是空的,并且正在调用,但是没有调用order execution run方法....

  • 问题内容: 我对CompletableFuture方法有疑问: 事情是JavaDoc这么说的: 返回一个新的CompletionStage,当此阶段正常完成时,将使用该阶段的结果作为所提供函数的参数来执行该阶段。有关涵盖异常完成的规则​​,请参见CompletionStage文档。 那线程呢?这将在哪个线程中执行?如果将来由线程池完成怎么办? 问题答案: 文档中指定的策略可以帮助您更好地理解: 对

  • 我有一个关于CompletableFuture方法的问题: 问题是JavaDoc只说了这么一句话: 返回一个新的CompletionStage,当此阶段正常完成时,将以此阶段的结果作为所提供函数的参数执行该CompletionStage。有关例外完成的规则,请参阅CompletionStage文档。 穿线呢?这将在哪个线程中执行?如果未来是由一个线程池来完成的呢?