小编wok*_*kmi的帖子

完成后,分区的工作不能自行停止?春批

我写了两个步骤的作业,其中两个步骤之一是分区步骤.分区步骤使用TaskExecutorPartitionHandler并在线程中运行5个从属步骤.该作业在main()方法中启动.但是在每个从属ItemReader返回null(结束符号)之后它不会停止.即使程序运行了main()方法中的最后一行代码(即System.out.println("Finished")),程序进程也不会停止,挂在内存中,什么也不做.我必须按下Eclipse面板上的停止按钮才能停止程序.

以下是JobLauncher.run()返回的JobExecution的内容,表示作业运行的成功状态.

JobExecution:id = 0,version = 2,startTime = Fri Nov 27 06:05:23 CST 2015,endTime = Fri Nov 27 06:05:39 CST 2015,lastUpdated = Fri Nov 27 06:05:39 CST 2015,status = COMPLETED,exitStatus = exitCode = COMPLETED; exitDescription =,job = [JobInstance:id = 0,version = 0,Job = [jobCensoredPages]],jobParameters = [{}]

7217
完了

为什么运行成功的Spring Batch程序仍然挂起?请指出我在哪里工作.我怀疑Spring Batch管理的多线程部分没有停止..

简单的工作运行代码

        Job job = (Job) context.getBean("jobPages");
        try {
            JobParameters p=new JobParametersBuilder()
                .toJobParameters();

            JobExecution result = launcher.run(job, new JobParameters());

            System.out.println(result.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
        context.getBean("idSet");
        AtomicInteger n=(AtomicInteger) …
Run Code Online (Sandbox Code Playgroud)

java spring spring-batch partition

4
推荐指数
3
解决办法
4155
查看次数

在 ItemReader/Processor/Writer 中访问 StepExecution/JobExecution 的最佳方式

我已经使用 SpringBatch 几个月了。我曾经将与执行相关的变量(如页数、项目数、批次的当前位置等)存储到 Bean 中。然后,通过使用, -setter 和 getter将这些 Bean 安装到ItemReader,上。这些 bean 还通过手动同步在线程之间共享。ItemProcessorItemWritersetVar()getVar()

但现在我发现这可能是执行批处理作业的错误方法。安装的 BeanItemReaders无法持久化JobRepository,因此无法记录作业停止和重新启动的状态。所以我还是需要回去使用StepExecution/ JobExecution。我在网上找到的那些例子都是基于 XML 配置,或者是更糟糕的 SpEL 自动连接到 setter 方法。

我纯粹使用 Java Config..是否有 Java 配置或面向 Java 代码的访问方式StepExecution?访问各种类型的最佳实践是什么ExecutionContext

java spring spring-batch

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×2

spring ×2

spring-batch ×2

partition ×1