Spring batch 在Spring批处理中,我可以在beforeStep实现中插入数据吗

Spring batch 在Spring批处理中,我可以在beforeStep实现中插入数据吗,spring-batch,Spring Batch,我需要在步骤开始之前和完成时更新数据库。其目的是在数据库中跟踪在任何时间运行的进程。在步骤运行之前,它将插入一个记录;该步骤完成后,将删除该记录。不优雅,但这是我的要求 我的想法是将其实现为StepExecutionListener,在beforeStep和afterStep中发出insert和delete语句。这还允许我利用为作业定义的数据源 这种方法的缺点是什么?框架中还有其他钩子可以更好地解决这个问题吗?通常,您所描述的应该是可能的。唯一需要注意的是事务控制,因为beforeStep和af

我需要在步骤开始之前和完成时更新数据库。其目的是在数据库中跟踪在任何时间运行的进程。在步骤运行之前,它将插入一个记录;该步骤完成后,将删除该记录。不优雅,但这是我的要求

我的想法是将其实现为StepExecutionListener,在beforeStep和afterStep中发出insert和delete语句。这还允许我利用为作业定义的数据源


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

通常,您所描述的应该是可能的。唯一需要注意的是事务控制,因为beforeStep和afterStep不在正常事务处理范围内。 下面是3篇好文章,详细解释了事务处理 ,

您还可以使用作为简单Tasklet步骤实现的单独步骤,而不是使用before-/afterStep侦听器。步骤1在db中插入一个条目或抛出一个异常,这会导致批处理失败或只是根据您的流定义结束它,步骤2执行您的正常逻辑,步骤3删除您在步骤1中插入的条目

我不明白的是,为什么你必须在数据库中写一个条目来检查它是否可用。一个简单的选择就够了吗


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

如果您是正确的,您需要实现StepExecutionListener。我认为这种方法没有缺点。或者您可以添加两个不同的tasklet,一个用于插入,另一个用于删除

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