我正在使用Spring Batch 3.0.1。 我有一个两步的工作。
我已经配置了它,用 CommandLineJobRunner 方式启动它,我预期的工作已经完成,包括PDF和数据库。
写入最终消息“进程结束”;并且,在 batch_job_execution 和 batch_step_execution 数据库表中,行使用 COMPLETED 状态和退出代码写入,并且结束时间。
所以,我的问题是提示没有回来,而且这个过程似乎正在执行。 当我使用Eclipse调试流程时,行为是相同的:工作已完成,但流程并未结束。与Atomikos,数据库池和步骤相关的线程仍在运行,我不明白为什么。
测试用例有9个PDF(项目)要处理。 第一步配置如下:
<bean id="printingTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="20" />
<property name="queueCapacity" value="50" />
<property name="waitForTasksToCompleteOnShutdown" value="false" />
</bean>
<step id="pdfStep" next="endLoggerStep">
<tasklet transaction-manager="jtaTransactionManager" task-executor="printingTaskExecutor" throttle-limit="10" >
<batch:chunk reader="pdfItemReader" processor="pdfItemProcessor" writer="pdfItemWriter" commit-interval="20">
</batch:chunk>
</tasklet>
</step>
pdfItemReader 是一个带有 pageSize 参数的JdbcPagingItemReader,其值也是20。
如何在命令行或Eclipse中实际完成该过程?任何错误的配置? 非常感谢任何帮助。感谢
[解决] 我对此很生气。最后,当使用跟踪级别进行日志记录时,最后一行是:
在bean上调用destroy方法'close',名称为'atomikosTransactionManager'
我将标志 forceShutdown 更改为true,最后程序感激不尽。
<bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
init-method="init" destroy-method="close">
<property name="forceShutdown" value="true" /><!-- Change this to true -->
</bean>
希望它有所帮助。
答案 0 :(得分:-2)
您可以使用System.exit(0);在将终止JVM并最终终止批处理执行的主类末尾。