2017-06-17 95 views
0

我需要在Step开始和完成之前更新我的数据库。目的是在数据库中跟踪哪些进程正在运行。在该步骤运行之前,它会插入记录;该步骤完成后,将删除该记录。不优雅,但这是我的要求。在Spring批处理中,我可以在beforeStep实现中插入数据吗?

我的想法是将其实现为StepExecutionListener,在beforeStep和afterStep中发出插入和删除语句。这也可以让我利用为作业定义的数据源。

这种方法的缺点是什么?框架中是否还有其他钩子可以更好地解决这个问题?

回答

0

一般来说,你所描述的应该是可能的。唯一要注意的是事务控制,因为beforeStep和afterStep不在“正常”事务处理范围之内。 (这里有3个好职位,这说明交易详细 https://blog.codecentric.de/en/2012/03/transactions-in-spring-batch-part-1-the-basics/https://blog.codecentric.de/en/2012/03/transactions-in-spring-batch-part-2-restart-cursor-based-reading-and-listeners/处理,https://blog.codecentric.de/en/2012/03/transactions-in-spring-batch-part-3-skip-and-retry/

您也可以使用单独的步骤(作为一个简单的任务蕾步实施),而不是用在─/ AfterStep的监听器。 Step1在db中插入一个条目或引发异常,导致批处理失败或简单地结束它(取决于流程定义),step2执行正常的逻辑,步骤3删除您在步骤1中插入的​​条目。

我不明白的是,为什么你必须真正写入数据库的条目,以检查它是否可用。难道一个简单的选择就足够了吗?

如果我必须这样做,我会通过2个步骤实现您的需求,第一个通过执行简单选择来检查可用性,第二步执行正常逻辑。

+0

感谢您的输入。在beforeStep期间插入记录是关于状态管理,而不是验证数据库是否可用。 –

0

你是对的,你需要实现StepExecutionListener。我认为这种方法没有缺点。或者你可以添加两个不同的tasklet插入和删除一个

相关问题