如何在 Spring 批次中审计来自 CompositeItemWriter 的记录?
How to do the Auditing of records from CompositeItemWriter in Spring Batch?
在Spring批次中,我想审计正在读取、处理和写入的记录数。我知道批处理元数据 table 中提供了相同的功能。根据业务需要,我们需要进行审核,例如 DATA_AUDIT
table.
在我的批处理作业中,我实现了 CompositeItemWriter,基于不同的字段(例如活动帐户、非活动帐户、活动标志等),基于此我将数据分离并将其写入多个目标tables.
这里说如果有 5000 条记录,这 5000 条记录被分组到数据集中,单个记录可以满足不同的业务规则并进入不同的组,这样数据就可以在 5000 块中增加到 20,000 条.
StepListeners 仅捕获编号。第一个作者的记录,它没有捕获任何其他作者的数据写入,我怎么能追踪到没有。的数据已从其他 3 位作者处写入?
有没有什么方法可以使用 Spring 批处理 API 或者我们怎样才能做到这一点?我浏览了 link,但在这里没有找到任何东西 - https://docs.spring.io/spring-batch/docs/current/reference/html/step.html#stepExecutionListener
您可以获取 JobExecutionContext 并更新写入器中的计数。
示例如下。
@Bean
@StepScope
public ItemWriter<Integer> itemWriter() {
return new ItemWriter<Integer>() {
private StepExecution stepExecution;
@Override
public void write(List<? extends Integer> items) throws Exception {
for (Integer item : items) {
System.out.println("item = " + item);
}
long count=stepExecution.getJobExecution().getExecutionContext().get("count");
count=count+items.size();
stepExecution.getJobExecution().getExecutionContext().put("count", count);
}
@BeforeStep
public void saveStepExecution(StepExecution stepExecution) {
this.stepExecution = stepExecution;
}
};
}
在Spring批次中,我想审计正在读取、处理和写入的记录数。我知道批处理元数据 table 中提供了相同的功能。根据业务需要,我们需要进行审核,例如 DATA_AUDIT
table.
在我的批处理作业中,我实现了 CompositeItemWriter,基于不同的字段(例如活动帐户、非活动帐户、活动标志等),基于此我将数据分离并将其写入多个目标tables.
这里说如果有 5000 条记录,这 5000 条记录被分组到数据集中,单个记录可以满足不同的业务规则并进入不同的组,这样数据就可以在 5000 块中增加到 20,000 条.
StepListeners 仅捕获编号。第一个作者的记录,它没有捕获任何其他作者的数据写入,我怎么能追踪到没有。的数据已从其他 3 位作者处写入?
有没有什么方法可以使用 Spring 批处理 API 或者我们怎样才能做到这一点?我浏览了 link,但在这里没有找到任何东西 - https://docs.spring.io/spring-batch/docs/current/reference/html/step.html#stepExecutionListener
您可以获取 JobExecutionContext 并更新写入器中的计数。
示例如下。
@Bean
@StepScope
public ItemWriter<Integer> itemWriter() {
return new ItemWriter<Integer>() {
private StepExecution stepExecution;
@Override
public void write(List<? extends Integer> items) throws Exception {
for (Integer item : items) {
System.out.println("item = " + item);
}
long count=stepExecution.getJobExecution().getExecutionContext().get("count");
count=count+items.size();
stepExecution.getJobExecution().getExecutionContext().put("count", count);
}
@BeforeStep
public void saveStepExecution(StepExecution stepExecution) {
this.stepExecution = stepExecution;
}
};
}