Spring 批处理数据库未更新
Spring Batch DB not getting updated
我正在 Tasklet 中编写业务逻辑,我正在向其中一个外部系统 A 的队列发送消息,然后使用 operator.stop() 方法停止作业(有时响应来得很晚,所以我正在释放通过停止 spring 批处理作业来获取系统资源)。
一旦我收到来自 systemA 的回复,我需要再次从上次完成的作业重新启动作业。
这就是我在 tasklet 中所做的。
public RepeatStatus execute(StepContribution stepCon, ChunkContext chunkCtx)
throws Exception {
JobOperator operator= (JobOperator)ApplicationContextProvider.getApplicationContext().getBean("jobOperator");
String msg = "some msg";
//Sending message to channel created using spring integration.
messageChannel.send(MessageBuilder.withPayload(msg).build());
//Stopping job with the job_exe_id 123
operator.stop(123);
ExitStatus es = new ExitStatus("MSG_SENT");
stepCon.setExitStatus(es);
return null;
}
我现在面临的问题是,一旦消息被发送到 systemA 的队列,我很快就会收到 systemA 的响应并且 spring 集成的服务激活器被调用并且由于某种原因 spring 批处理数据库永远不会更新为 "STOPPED" ,而是数据库条目将作业状态显示为 "STOPPING" 并且因此我无法在服务激活器中重新启动作业,因为它是仍处于 "STOPPING" 状态。
任何人都可以告诉我为什么 spring 批处理数据库没有更新 "STOPPED" state 的状态。
EDIT- 我已经尝试在将消息发送到 SystemA 的队列之前停止作业,但仍然 SPRING BATCH DB 没有得到 "STOPEED" 的更新状态。
当我从外部系统收到响应时,我正在发送消息的 tasklet
事务没有得到提交。
为了解决上述问题,我使用了一个步骤执行侦听器,我在 tasklet
和 "afterstep" 执行侦听器中进行了所有数据库更新,我将消息发送到外部客户端,所以当流到达 "afterstep" 执行侦听器时,tasklet
事务将被提交。
希望这对有需要的人有所帮助。
我正在 Tasklet 中编写业务逻辑,我正在向其中一个外部系统 A 的队列发送消息,然后使用 operator.stop() 方法停止作业(有时响应来得很晚,所以我正在释放通过停止 spring 批处理作业来获取系统资源)。
一旦我收到来自 systemA 的回复,我需要再次从上次完成的作业重新启动作业。
这就是我在 tasklet 中所做的。
public RepeatStatus execute(StepContribution stepCon, ChunkContext chunkCtx)
throws Exception {
JobOperator operator= (JobOperator)ApplicationContextProvider.getApplicationContext().getBean("jobOperator");
String msg = "some msg";
//Sending message to channel created using spring integration.
messageChannel.send(MessageBuilder.withPayload(msg).build());
//Stopping job with the job_exe_id 123
operator.stop(123);
ExitStatus es = new ExitStatus("MSG_SENT");
stepCon.setExitStatus(es);
return null;
}
我现在面临的问题是,一旦消息被发送到 systemA 的队列,我很快就会收到 systemA 的响应并且 spring 集成的服务激活器被调用并且由于某种原因 spring 批处理数据库永远不会更新为 "STOPPED" ,而是数据库条目将作业状态显示为 "STOPPING" 并且因此我无法在服务激活器中重新启动作业,因为它是仍处于 "STOPPING" 状态。
任何人都可以告诉我为什么 spring 批处理数据库没有更新 "STOPPED" state 的状态。
EDIT- 我已经尝试在将消息发送到 SystemA 的队列之前停止作业,但仍然 SPRING BATCH DB 没有得到 "STOPEED" 的更新状态。
当我从外部系统收到响应时,我正在发送消息的 tasklet
事务没有得到提交。
为了解决上述问题,我使用了一个步骤执行侦听器,我在 tasklet
和 "afterstep" 执行侦听器中进行了所有数据库更新,我将消息发送到外部客户端,所以当流到达 "afterstep" 执行侦听器时,tasklet
事务将被提交。
希望这对有需要的人有所帮助。